summaryrefslogtreecommitdiffstats
path: root/core/jni/android_backup_BackupHelperDispatcher.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2011-04-11 16:50:19 -0700
committerElliott Hughes <enh@google.com>2011-04-11 17:04:01 -0700
commita3804cf77f0edd93f6247a055cdafb856b117eec (patch)
tree795814e56ceddf3773f7f2b47bb7a6b632daa5d5 /core/jni/android_backup_BackupHelperDispatcher.cpp
parent4123211637dcc0155091016f0c0987b80e56ab7b (diff)
downloadframeworks_base-a3804cf77f0edd93f6247a055cdafb856b117eec.zip
frameworks_base-a3804cf77f0edd93f6247a055cdafb856b117eec.tar.gz
frameworks_base-a3804cf77f0edd93f6247a055cdafb856b117eec.tar.bz2
You don't need to poke around inside FileDescriptor manually.
We can help you with that. Note also that getParcelFileDescriptorFD did no such thing. All its callers were passing in a regular java.io.FileDescriptor and expecting the int. No ParcelFileDescriptors involved. Change-Id: Idc233626f20c092e719f152562601f406cc1b64a
Diffstat (limited to 'core/jni/android_backup_BackupHelperDispatcher.cpp')
-rw-r--r--core/jni/android_backup_BackupHelperDispatcher.cpp29
1 files changed, 7 insertions, 22 deletions
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp
index 26e7d66..49f1cd4 100644
--- a/core/jni/android_backup_BackupHelperDispatcher.cpp
+++ b/core/jni/android_backup_BackupHelperDispatcher.cpp
@@ -37,8 +37,6 @@ struct chunk_header_v1 {
int nameLength; // not including the NULL terminator, which is not written to the file
};
-// java.io.FileDescriptor
-static jfieldID s_descriptorField = 0;
static jfieldID s_chunkSizeField = 0;
static jfieldID s_keyPrefixField = 0;
@@ -46,12 +44,11 @@ static int
readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj)
{
chunk_header_v1 flattenedHeader;
- int fd;
ssize_t amt;
String8 keyPrefix;
char* buf;
- fd = env->GetIntField(fdObj, s_descriptorField);
+ int fd = jniGetFDFromFileDescriptor(env, fdObj);
amt = read(fd, &flattenedHeader.headerSize, sizeof(flattenedHeader.headerSize));
if (amt != sizeof(flattenedHeader.headerSize)) {
@@ -128,9 +125,7 @@ readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj)
static int
skipChunk_native(JNIEnv* env, jobject clazz, jobject fdObj, jint bytesToSkip)
{
- int fd;
-
- fd = env->GetIntField(fdObj, s_descriptorField);
+ int fd = jniGetFDFromFileDescriptor(env, fdObj);
lseek(fd, bytesToSkip, SEEK_CUR);
@@ -152,9 +147,8 @@ allocateHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdO
int nameLength;
int namePadding;
int headerSize;
- int fd;
- fd = env->GetIntField(fdObj, s_descriptorField);
+ int fd = jniGetFDFromFileDescriptor(env, fdObj);
nameObj = (jstring)env->GetObjectField(headerObj, s_keyPrefixField);
@@ -166,7 +160,7 @@ allocateHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdO
pos = lseek(fd, 0, SEEK_CUR);
lseek(fd, headerSize, SEEK_CUR);
-
+
return pos;
}
@@ -175,13 +169,12 @@ writeHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj,
{
int err;
chunk_header_v1 header;
- int fd;
int namePadding;
int prevPos;
jstring nameObj;
const char* buf;
- fd = env->GetIntField(fdObj, s_descriptorField);
+ int fd = jniGetFDFromFileDescriptor(env, fdObj);
prevPos = lseek(fd, 0, SEEK_CUR);
nameObj = (jstring)env->GetObjectField(headerObj, s_keyPrefixField);
@@ -234,15 +227,7 @@ static const JNINativeMethod g_methods[] = {
int register_android_backup_BackupHelperDispatcher(JNIEnv* env)
{
- jclass clazz;
-
- clazz = env->FindClass("java/io/FileDescriptor");
- LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor");
- s_descriptorField = env->GetFieldID(clazz, "descriptor", "I");
- LOG_FATAL_IF(s_descriptorField == NULL,
- "Unable to find descriptor field in java.io.FileDescriptor");
-
- clazz = env->FindClass("android/app/backup/BackupHelperDispatcher$Header");
+ jclass clazz = env->FindClass("android/app/backup/BackupHelperDispatcher$Header");
LOG_FATAL_IF(clazz == NULL,
"Unable to find class android.app.backup.BackupHelperDispatcher.Header");
s_chunkSizeField = env->GetFieldID(clazz, "chunkSize", "I");
@@ -251,7 +236,7 @@ int register_android_backup_BackupHelperDispatcher(JNIEnv* env)
s_keyPrefixField = env->GetFieldID(clazz, "keyPrefix", "Ljava/lang/String;");
LOG_FATAL_IF(s_keyPrefixField == NULL,
"Unable to find keyPrefix field in android.app.backup.BackupHelperDispatcher.Header");
-
+
return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupHelperDispatcher",
g_methods, NELEM(g_methods));
}