diff options
5 files changed, 4 insertions, 129 deletions
diff --git a/libs/samba/src/main/cpp/samba.cpp b/libs/samba/src/main/cpp/samba.cpp index ed73d62..38ad5da 100644 --- a/libs/samba/src/main/cpp/samba.cpp +++ b/libs/samba/src/main/cpp/samba.cpp @@ -192,30 +192,6 @@ class Context { return smb2_unlink(context_.get(), path.c_str()) == 0; } - std::optional<std::string> ReadLink(const std::string& path) { - // Good to start with a fairly small size as current implementation - // of smb2_readlink uses strncpy, which pads the whole unused buffer - // with zeros. - uint32_t bufsize = 256; - std::vector<char> buf; - while (true) { - buf.resize(bufsize); - auto ret = smb2_readlink(context_.get(), path.c_str(), buf.data(), bufsize); - if (ret != 0) - return std::nullopt; - // smb2_readlink uses strncpy, so if actual path was larger than bufsize - // there will be no terminating zero. - auto it = std::find(buf.begin(), buf.end(), '\0'); - if (it != buf.end()) - return std::string(buf.begin(), it); - const auto previous = bufsize; - bufsize *= 2; - // Check for bufsize (a uint32_t) overflow. - if (bufsize <= previous) - return std::nullopt; - } - } - [[nodiscard]] std::unique_ptr<File> OpenFile(const std::string& path, int32_t mode) { int flags; switch (mode) { @@ -289,13 +265,6 @@ jboolean nativeContextUnlink(JNIEnv* env, jclass clazz, jlong ptr, jstring path) return reinterpret_cast<Context*>(ptr)->Unlink(jni::StringToUTF8(env, jni::ParamRef<jstring>(env, path))) ? JNI_TRUE : JNI_FALSE; } -jstring nativeContextReadLink(JNIEnv* env, jclass clazz, jlong ptr, jstring path) { - auto ret = reinterpret_cast<Context*>(ptr)->ReadLink(jni::StringToUTF8(env, jni::ParamRef<jstring>(env, path))); - if (ret.has_value()) - return jni::UTF8ToString(env, ret.value()).release(); - return nullptr; -} - jlong nativeContextOpenFile(JNIEnv* env, jclass clazz, jlong ptr, jstring path, jint mode) { return reinterpret_cast<jlong>(reinterpret_cast<Context*>(ptr)->OpenFile(jni::StringToUTF8(env, jni::ParamRef<jstring>(env, path)), mode).release()); } @@ -382,7 +351,6 @@ void RegisterSamba(JNIEnv* env) { { "nativeContextMakeDir", "(JLjava/lang/String;)Z", reinterpret_cast<void*>(&nativeContextMakeDir) }, { "nativeContextRemoveDir", "(JLjava/lang/String;)Z", reinterpret_cast<void*>(&nativeContextRemoveDir) }, { "nativeContextUnlink", "(JLjava/lang/String;)Z", reinterpret_cast<void*>(&nativeContextUnlink) }, - { "nativeContextReadLink", "(JLjava/lang/String;)Ljava/lang/String;", reinterpret_cast<void*>(&nativeContextReadLink) }, { "nativeContextOpenFile", "(JLjava/lang/String;I)J", reinterpret_cast<void*>(&nativeContextOpenFile) }, { "nativeUrlDestroy", "(J)V", reinterpret_cast<void*>(&nativeUrlDestroy) }, @@ -424,9 +392,6 @@ jni::LocalRef<jobject> CreateDirEntry(JNIEnv* env, const std::string& name, cons case SMB2_TYPE_FILE: type = 1; break; - case SMB2_TYPE_LINK: - type = 2; - break; default: return {env, nullptr}; } diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt index c951d37..590fab8 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt @@ -26,7 +26,6 @@ internal object NativeSamba { fun makeDir(path: String): Boolean fun removeDir(path: String): Boolean fun unlink(path: String): Boolean - fun readLink(path: String): String? fun openFile(path: String, mode: OpenMode): File? } @@ -37,7 +36,6 @@ internal object NativeSamba { enum class DirEntryType { DIR, FILE, - LINK, } @Keep @@ -114,10 +112,6 @@ internal object NativeSamba { return nativeContextUnlink(ptr, path) } - override fun readLink(path: String): String? { - return nativeContextReadLink(ptr, path) - } - override fun openFile(path: String, mode: NativeSamba.OpenMode): File? { val file = nativeContextOpenFile(ptr, path, mode.value) return if (file != 0L) NativeFile(path, file) else null @@ -181,7 +175,6 @@ internal object NativeSamba { when (type) { 0 -> DirEntryType.DIR 1 -> DirEntryType.FILE - 2 -> DirEntryType.LINK else -> throw IllegalArgumentException("Unknown type: $type") }, size = size.toULong(), @@ -198,7 +191,6 @@ internal object NativeSamba { private external fun nativeContextMakeDir(ptr: Long, path: String): Boolean private external fun nativeContextRemoveDir(ptr: Long, path: String): Boolean private external fun nativeContextUnlink(ptr: Long, path: String): Boolean - private external fun nativeContextReadLink(otr: Long, path: String): String? private external fun nativeContextOpenFile(ptr: Long, path: String, mode: Int): Long private external fun nativeUrlDestroy(ptr: Long) diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt index a645804..7378ab5 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt @@ -37,9 +37,6 @@ internal class SambaConnection(uri: String, credentials: SambaCredentials) { fun unlink(path: String): Boolean = connected && context.unlink(join(url!!.path(), path)) - fun readLink(path: String): String? = - if (connected) context.readLink(join(url!!.path(), path)) else null - fun openFile(path: String, read: NativeSamba.OpenMode): NativeSamba.File? = if (connected) context.openFile(join(url!!.path(), path), read) else null diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaDirectory.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaDirectory.kt index fc5b290..67228a4 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaDirectory.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaDirectory.kt @@ -69,16 +69,13 @@ internal open class SambaDirectory( } override fun modifiableOpenLink(name: String): ModifiableLink? { - val newPath = SambaConnection.join(path, name) - val entry = conn.entry(newPath) ?: return null - if (entry.type != NativeSamba.DirEntryType.LINK) return null - return SambaLink(conn, newPath, name) + return null } override fun modifiableList(): ModifiableDirectory.Content { val directories = mutableListOf<ModifiableDirectory>() val files = mutableListOf<ModifiableFile>() - val links = mutableListOf<ModifiableLink>() + val links = emptyList<ModifiableLink>() val dir = conn.openDir(path) if (dir != null) { dir.list().forEach { entry -> @@ -90,9 +87,6 @@ internal open class SambaDirectory( NativeSamba.DirEntryType.FILE -> { files.add(SambaFile(conn, entryPath, entry.name, entry.size, entry.lastModified)) } - NativeSamba.DirEntryType.LINK -> { - links.add(SambaLink(conn, entryPath, entry.name)) - } } } dir.destroy() @@ -138,8 +132,7 @@ internal open class SambaDirectory( dir.list().forEach { entry -> val entryPath = SambaConnection.join(removePath, entry.name) if (!when (entry.type) { - NativeSamba.DirEntryType.FILE, - NativeSamba.DirEntryType.LINK, + NativeSamba.DirEntryType.FILE -> conn.unlink(entryPath) NativeSamba.DirEntryType.DIR -> removeRecursive(entryPath) @@ -161,10 +154,7 @@ internal open class SambaDirectory( } override fun removeLink(name: String): Boolean { - val removePath = SambaConnection.join(path, name) - val entry = conn.entry(removePath) ?: return false - if (entry.type != NativeSamba.DirEntryType.LINK) return false - return conn.unlink(removePath) + return false } override fun openDir(name: String) = modifiableOpenDir(name) diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaLink.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaLink.kt deleted file mode 100644 index a9e6f04..0000000 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaLink.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.the_jk.cleversync.io.samba - -import org.the_jk.cleversync.io.Directory -import org.the_jk.cleversync.io.File -import org.the_jk.cleversync.io.Link -import org.the_jk.cleversync.io.ModifiableLink -import java.io.IOException - -internal class SambaLink( - private val conn: SambaConnection, - private val path: String, - override val name: String, -) : ModifiableLink { - override fun modifiableResolve(): ModifiableLink.ModifiableLinkTarget { - val (newPath, entry) = doResolve() - if (entry == null) return ModifiableLink.NoTarget - return when (entry.type) { - NativeSamba.DirEntryType.DIR -> - ModifiableLink.ModifiableDirectoryTarget(SambaDirectory(conn, newPath, entry.name)) - NativeSamba.DirEntryType.FILE -> - ModifiableLink.ModifiableFileTarget( - SambaFile(conn, newPath, entry.name, entry.size, entry.lastModified), - ) - NativeSamba.DirEntryType.LINK -> - ModifiableLink.NoTarget - } - } - - override fun target(directory: Directory) { - throw IOException("Unsupported operation") - } - - override fun target(file: File) { - throw IOException("Unsupported operation") - } - - override fun target(name: String) { - throw IOException("Unsupported operation") - } - - override fun resolve(): Link.LinkTarget { - val (newPath, entry) = doResolve() - if (entry == null) return Link.NoTarget - return when (entry.type) { - NativeSamba.DirEntryType.DIR -> - Link.DirectoryTarget(SambaDirectory(conn, newPath, entry.name)) - NativeSamba.DirEntryType.FILE -> - Link.FileTarget(SambaFile(conn, newPath, entry.name, entry.size, entry.lastModified)) - NativeSamba.DirEntryType.LINK -> - Link.NoTarget - } - } - - override fun equals(other: Any?) = other is SambaLink && other.conn == conn && other.path == path - override fun hashCode() = path.hashCode() - override fun toString() = "$conn/$path" - - private fun doResolve(): Pair<String, NativeSamba.DirEntry?> { - var linkPath = path - var entry: NativeSamba.DirEntry? = null - while (true) { - val target = conn.readLink(linkPath) ?: break - linkPath = SambaConnection.join(linkPath, target) - entry = conn.entry(linkPath) ?: break - if (entry.type != NativeSamba.DirEntryType.LINK) break - } - return linkPath to entry - } -} |
