summaryrefslogtreecommitdiffstats
path: root/core/jni/android_util_Binder.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_util_Binder.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_util_Binder.cpp')
-rw-r--r--core/jni/android_util_Binder.cpp63
1 files changed, 10 insertions, 53 deletions
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 8618b79..0681195 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -131,13 +131,6 @@ static struct log_offsets_t
jmethodID mLogE;
} gLogOffsets;
-static struct file_descriptor_offsets_t
-{
- jclass mClass;
- jmethodID mConstructor;
- jfieldID mDescriptor;
-} gFileDescriptorOffsets;
-
static struct parcel_file_descriptor_offsets_t
{
jclass mClass;
@@ -591,17 +584,6 @@ Parcel* parcelForJavaObject(JNIEnv* env, jobject obj)
return NULL;
}
-jobject newFileDescriptor(JNIEnv* env, int fd)
-{
- jobject object = env->NewObject(
- gFileDescriptorOffsets.mClass, gFileDescriptorOffsets.mConstructor);
- if (object != NULL) {
- //LOGI("Created new FileDescriptor %p with fd %d\n", object, fd);
- env->SetIntField(object, gFileDescriptorOffsets.mDescriptor, fd);
- }
- return object;
-}
-
jobject newParcelFileDescriptor(JNIEnv* env, jobject fileDesc)
{
return env->NewObject(
@@ -1358,8 +1340,8 @@ static void android_os_Parcel_writeFileDescriptor(JNIEnv* env, jobject clazz, jo
{
Parcel* parcel = parcelForJavaObject(env, clazz);
if (parcel != NULL) {
- const status_t err = parcel->writeDupFileDescriptor(
- env->GetIntField(object, gFileDescriptorOffsets.mDescriptor));
+ const status_t err =
+ parcel->writeDupFileDescriptor(jniGetFDFromFileDescriptor(env, object));
if (err != NO_ERROR) {
jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
}
@@ -1459,13 +1441,7 @@ static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jobject clazz)
if (fd < 0) return NULL;
fd = dup(fd);
if (fd < 0) return NULL;
- jobject object = env->NewObject(
- gFileDescriptorOffsets.mClass, gFileDescriptorOffsets.mConstructor);
- if (object != NULL) {
- //LOGI("Created new FileDescriptor %p with fd %d\n", object, fd);
- env->SetIntField(object, gFileDescriptorOffsets.mDescriptor, fd);
- }
- return object;
+ return jniCreateFileDescriptor(env, fd);
}
return NULL;
}
@@ -1512,7 +1488,7 @@ static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jobject clazz,
jniThrowException(env, "java/io/FileNotFoundException", strerror(errno));
return NULL;
}
- jobject object = newFileDescriptor(env, fd);
+ jobject object = jniCreateFileDescriptor(env, fd);
if (object == NULL) {
close(fd);
}
@@ -1525,7 +1501,7 @@ static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jobject clazz, j
jniThrowNullPointerException(env, NULL);
return NULL;
}
- int origfd = env->GetIntField(orig, gFileDescriptorOffsets.mDescriptor);
+ int origfd = jniGetFDFromFileDescriptor(env, orig);
if (origfd < 0) {
jniThrowException(env, "java/lang/IllegalArgumentException", "bad FileDescriptor");
return NULL;
@@ -1536,7 +1512,7 @@ static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jobject clazz, j
jniThrowIOException(env, errno);
return NULL;
}
- jobject object = newFileDescriptor(env, fd);
+ jobject object = jniCreateFileDescriptor(env, fd);
if (object == NULL) {
close(fd);
}
@@ -1549,9 +1525,9 @@ static void android_os_Parcel_closeFileDescriptor(JNIEnv* env, jobject clazz, jo
jniThrowNullPointerException(env, NULL);
return;
}
- int fd = env->GetIntField(object, gFileDescriptorOffsets.mDescriptor);
+ int fd = jniGetFDFromFileDescriptor(env, object);
if (fd >= 0) {
- env->SetIntField(object, gFileDescriptorOffsets.mDescriptor, -1);
+ jniSetFileDescriptorOfFD(env, object, -1);
//LOGI("Closing ParcelFileDescriptor %d\n", fd);
close(fd);
}
@@ -1563,9 +1539,9 @@ static void android_os_Parcel_clearFileDescriptor(JNIEnv* env, jobject clazz, jo
jniThrowNullPointerException(env, NULL);
return;
}
- int fd = env->GetIntField(object, gFileDescriptorOffsets.mDescriptor);
+ int fd = jniGetFDFromFileDescriptor(env, object);
if (fd >= 0) {
- env->SetIntField(object, gFileDescriptorOffsets.mDescriptor, -1);
+ jniSetFileDescriptorOfFD(env, object, -1);
}
}
@@ -1794,15 +1770,6 @@ static int int_register_android_os_Parcel(JNIEnv* env)
clazz, "e", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I");
assert(gLogOffsets.mLogE);
- clazz = env->FindClass("java/io/FileDescriptor");
- LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor");
- gFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
- gFileDescriptorOffsets.mConstructor
- = env->GetMethodID(clazz, "<init>", "()V");
- gFileDescriptorOffsets.mDescriptor = env->GetFieldID(clazz, "descriptor", "I");
- LOG_FATAL_IF(gFileDescriptorOffsets.mDescriptor == NULL,
- "Unable to find descriptor field in java.io.FileDescriptor");
-
clazz = env->FindClass("android/os/ParcelFileDescriptor");
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
@@ -1842,13 +1809,3 @@ int register_android_os_Binder(JNIEnv* env)
return -1;
return 0;
}
-
-namespace android {
-
-// Returns the Unix file descriptor for a ParcelFileDescriptor object
-int getParcelFileDescriptorFD(JNIEnv* env, jobject object)
-{
- return env->GetIntField(object, gFileDescriptorOffsets.mDescriptor);
-}
-
-}