diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-05-23 14:08:12 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2011-05-23 14:10:26 -0700 |
commit | 939461300a0283a9f370a0425d4061d32b36f952 (patch) | |
tree | 41e7c361f261448cb511fa97324b7648a4fe8cc2 /core/jni/android_os_ParcelFileDescriptor.cpp | |
parent | bdd8a16282cf85bfdbe4c15adcd5c37db772de11 (diff) | |
parent | 070a19e035cd28f2a0cc831f2322f2121d80de44 (diff) | |
download | frameworks_base-939461300a0283a9f370a0425d4061d32b36f952.zip frameworks_base-939461300a0283a9f370a0425d4061d32b36f952.tar.gz frameworks_base-939461300a0283a9f370a0425d4061d32b36f952.tar.bz2 |
resolved conflicts for merge of 070a19e0 to master
Change-Id: I855ab02a4e8dd465af67fd23b66c0dace76bd411
Diffstat (limited to 'core/jni/android_os_ParcelFileDescriptor.cpp')
-rw-r--r-- | core/jni/android_os_ParcelFileDescriptor.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/core/jni/android_os_ParcelFileDescriptor.cpp b/core/jni/android_os_ParcelFileDescriptor.cpp index 4ec131c..99a2d04 100644 --- a/core/jni/android_os_ParcelFileDescriptor.cpp +++ b/core/jni/android_os_ParcelFileDescriptor.cpp @@ -34,20 +34,37 @@ static struct parcel_file_descriptor_offsets_t jfieldID mFileDescriptor; } gParcelFileDescriptorOffsets; -static int android_os_ParcelFileDescriptor_createPipeNative(JNIEnv* env, +static jobject android_os_ParcelFileDescriptor_getFileDescriptorFromFd(JNIEnv* env, + jobject clazz, jint origfd) +{ + int fd = dup(origfd); + if (fd < 0) { + jniThrowException(env, "java/io/IOException", strerror(errno)); + return NULL; + } + return jniCreateFileDescriptor(env, fd); +} + +static jobject android_os_ParcelFileDescriptor_getFileDescriptorFromFdNoDup(JNIEnv* env, + jobject clazz, jint fd) +{ + return jniCreateFileDescriptor(env, fd); +} + +static void android_os_ParcelFileDescriptor_createPipeNative(JNIEnv* env, jobject clazz, jobjectArray outFds) { int fds[2]; if (pipe(fds) < 0) { - return -errno; + int therr = errno; + jniThrowException(env, "java/io/IOException", strerror(therr)); + return; } for (int i=0; i<2; i++) { jobject fdObj = jniCreateFileDescriptor(env, fds[i]); env->SetObjectArrayElement(outFds, i, fdObj); } - - return 0; } static jint getFd(JNIEnv* env, jobject clazz) @@ -102,7 +119,11 @@ static jlong android_os_ParcelFileDescriptor_getFdNative(JNIEnv* env, jobject cl } static const JNINativeMethod gParcelFileDescriptorMethods[] = { - {"createPipeNative", "([Ljava/io/FileDescriptor;)I", + {"getFileDescriptorFromFd", "(I)Ljava/io/FileDescriptor;", + (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromFd}, + {"getFileDescriptorFromFdNoDup", "(I)Ljava/io/FileDescriptor;", + (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromFdNoDup}, + {"createPipeNative", "([Ljava/io/FileDescriptor;)V", (void*)android_os_ParcelFileDescriptor_createPipeNative}, {"getStatSize", "()J", (void*)android_os_ParcelFileDescriptor_getStatSize}, |