summaryrefslogtreecommitdiff
path: root/libs/sftp/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'libs/sftp/src/main/java/org')
-rw-r--r--libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpDirectory.kt3
-rw-r--r--libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpLink.kt2
2 files changed, 5 insertions, 0 deletions
diff --git a/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpDirectory.kt b/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpDirectory.kt
index 90a3127..f1ae513 100644
--- a/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpDirectory.kt
+++ b/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpDirectory.kt
@@ -12,6 +12,7 @@ import org.the_jk.cleversync.io.ModifiableDirectory
import org.the_jk.cleversync.io.ModifiableFile
import org.the_jk.cleversync.io.ModifiableLink
import java.io.IOException
+import java.nio.file.FileAlreadyExistsException
import java.time.Instant
import kotlin.time.Duration.Companion.seconds
@@ -111,6 +112,8 @@ internal open class SftpDirectory(
override fun createFile(name: String): ModifiableFile {
val newPath = PathUtils.join(path, name)
+ val entry = conn.entry(newPath, followLink = false)
+ if (entry != null) throw FileAlreadyExistsException(name)
return SftpFile(conn, newPath, name, 0UL, Instant.EPOCH, Instant.EPOCH)
}
diff --git a/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpLink.kt b/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpLink.kt
index a922e26..0766f1a 100644
--- a/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpLink.kt
+++ b/libs/sftp/src/main/java/org/the_jk/cleversync/io/sftp/SftpLink.kt
@@ -40,6 +40,8 @@ internal class SftpLink(
}
private fun target(name: String, rawTarget: Boolean) {
+ // conn.symlink fails if path already exists
+ conn.unlink(path)
if (!conn.symlink(name, rawTarget, path)) throw IOException(conn.error)
}