summaryrefslogtreecommitdiffstats
path: root/core/jni/android_os_ParcelFileDescriptor.cpp
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-05-23 14:08:12 -0700
committerDianne Hackborn <hackbod@google.com>2011-05-23 14:10:26 -0700
commit939461300a0283a9f370a0425d4061d32b36f952 (patch)
tree41e7c361f261448cb511fa97324b7648a4fe8cc2 /core/jni/android_os_ParcelFileDescriptor.cpp
parentbdd8a16282cf85bfdbe4c15adcd5c37db772de11 (diff)
parent070a19e035cd28f2a0cc831f2322f2121d80de44 (diff)
downloadframeworks_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.cpp31
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},