From dc82772e5eb8063bace8415193eebc52cedcec64 Mon Sep 17 00:00:00 2001 From: Hardcore Sushi Date: Fri, 23 Sep 2022 20:54:23 +0200 Subject: [PATCH] More controllable file read/write --- src/jni/include/libcryfs-jni.h | 4 ++-- src/jni/libcryfs-jni.cpp | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/jni/include/libcryfs-jni.h b/src/jni/include/libcryfs-jni.h index 3673f429..50eecb27 100644 --- a/src/jni/include/libcryfs-jni.h +++ b/src/jni/include/libcryfs-jni.h @@ -9,8 +9,8 @@ jboolean cryfs_change_encryption_key(JNIEnv *env, jbyteArray jnewPassword, jobject jreturnedHash); jlong cryfs_create(JNIEnv* env, jlong fusePtr, jstring jpath, mode_t mode); jlong cryfs_open(JNIEnv* env, jlong fusePtr, jstring jpath, jint flags); -jint cryfs_read(JNIEnv* env, jlong fusePtr, jlong fileHandle, jbyteArray jbuffer, jlong offset); -jint cryfs_write(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong offset, jbyteArray jbuffer, jint size); +jint cryfs_read(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong fileOffset, jbyteArray buffer, jlong dstOffset, jlong length); +jint cryfs_write(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong fileOffset, jbyteArray buffer, jlong srcOffset, jlong length); jint cryfs_truncate(JNIEnv* env, jlong fusePtr, jstring jpath, jlong size); jint cryfs_unlink(JNIEnv* env, jlong fusePtr, jstring jpath); jint cryfs_release(jlong fusePtr, jlong fileHandle); diff --git a/src/jni/libcryfs-jni.cpp b/src/jni/libcryfs-jni.cpp index c8800889..4582cd3f 100644 --- a/src/jni/libcryfs-jni.cpp +++ b/src/jni/libcryfs-jni.cpp @@ -148,22 +148,21 @@ extern "C" jlong cryfs_open(JNIEnv* env, jlong fusePtr, jstring jpath, jint flag } } -extern "C" jint cryfs_read(JNIEnv* env, jlong fusePtr, jlong fileHandle, jbyteArray jbuffer, jlong offset) { +extern "C" jint cryfs_read(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong fileOffset, jbyteArray jbuffer, jlong dstOffset, jlong length) { Fuse* fuse = reinterpret_cast(fusePtr); - const jsize size = env->GetArrayLength(jbuffer); char* buff = reinterpret_cast(env->GetByteArrayElements(jbuffer, NULL)); - int result = fuse->read(buff, size, offset, fileHandle); + int result = fuse->read(buff+dstOffset, length, fileOffset, fileHandle); env->ReleaseByteArrayElements(jbuffer, reinterpret_cast(buff), 0); return result; } -extern "C" jint cryfs_write(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong offset, jbyteArray jbuffer, jint size) { +extern "C" jint cryfs_write(JNIEnv* env, jlong fusePtr, jlong fileHandle, jlong fileOffset, jbyteArray jbuffer, jlong srcOffset, jlong length) { Fuse* fuse = reinterpret_cast(fusePtr); char* buff = reinterpret_cast(env->GetByteArrayElements(jbuffer, NULL)); - int result = fuse->write(buff, size, offset, fileHandle); + int result = fuse->write(buff+srcOffset, length, fileOffset, fileHandle); env->ReleaseByteArrayElements(jbuffer, reinterpret_cast(buff), 0); return result;