summaryrefslogtreecommitdiff
path: root/libs/samba
diff options
context:
space:
mode:
Diffstat (limited to 'libs/samba')
-rw-r--r--libs/samba/src/main/cpp/samba.cpp35
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt8
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt3
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaDirectory.kt18
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaLink.kt69
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
- }
-}