More controllable file read/write
This commit is contained in:
parent
c0600c2624
commit
dc82772e5e
@ -9,8 +9,8 @@ jboolean cryfs_change_encryption_key(JNIEnv *env,
|
|||||||
jbyteArray jnewPassword, jobject jreturnedHash);
|
jbyteArray jnewPassword, jobject jreturnedHash);
|
||||||
jlong cryfs_create(JNIEnv* env, jlong fusePtr, jstring jpath, mode_t mode);
|
jlong cryfs_create(JNIEnv* env, jlong fusePtr, jstring jpath, mode_t mode);
|
||||||
jlong cryfs_open(JNIEnv* env, jlong fusePtr, jstring jpath, jint flags);
|
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_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 offset, jbyteArray jbuffer, jint size);
|
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_truncate(JNIEnv* env, jlong fusePtr, jstring jpath, jlong size);
|
||||||
jint cryfs_unlink(JNIEnv* env, jlong fusePtr, jstring jpath);
|
jint cryfs_unlink(JNIEnv* env, jlong fusePtr, jstring jpath);
|
||||||
jint cryfs_release(jlong fusePtr, jlong fileHandle);
|
jint cryfs_release(jlong fusePtr, jlong fileHandle);
|
||||||
|
@ -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<Fuse*>(fusePtr);
|
Fuse* fuse = reinterpret_cast<Fuse*>(fusePtr);
|
||||||
const jsize size = env->GetArrayLength(jbuffer);
|
|
||||||
char* buff = reinterpret_cast<char*>(env->GetByteArrayElements(jbuffer, NULL));
|
char* buff = reinterpret_cast<char*>(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<jbyte*>(buff), 0);
|
env->ReleaseByteArrayElements(jbuffer, reinterpret_cast<jbyte*>(buff), 0);
|
||||||
return result;
|
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<Fuse*>(fusePtr);
|
Fuse* fuse = reinterpret_cast<Fuse*>(fusePtr);
|
||||||
char* buff = reinterpret_cast<char*>(env->GetByteArrayElements(jbuffer, NULL));
|
char* buff = reinterpret_cast<char*>(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<jbyte*>(buff), 0);
|
env->ReleaseByteArrayElements(jbuffer, reinterpret_cast<jbyte*>(buff), 0);
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
Reference in New Issue
Block a user