Loading core/jni/android_os_Parcel.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -510,7 +510,11 @@ static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, j if (fd < 0) return NULL; fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); if (fd < 0) return NULL; return jniCreateFileDescriptor(env, fd); jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == NULL) { close(fd); } return jifd; } return NULL; } Loading core/jni/android_os_SharedMemory.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,11 @@ jobject SharedMemory_nCreate(JNIEnv* env, jobject, jstring jname, jint size) { return nullptr; } return jniCreateFileDescriptor(env, fd); jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == nullptr) { close(fd); } return jifd; } jint SharedMemory_nGetSize(JNIEnv* env, jobject, jobject fileDescriptor) { Loading services/core/jni/com_android_server_SerialService.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ static jobject android_server_SerialService_open(JNIEnv *env, jobject /* thiz */ jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading services/core/jni/com_android_server_UsbDeviceManager.cpp +13 −16 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include "android_runtime/AndroidRuntime.h" #include "android_runtime/Log.h" #include "MtpDescriptors.h" Loading Loading @@ -88,6 +89,7 @@ static jobject android_server_UsbDeviceManager_openAccessory(JNIEnv *env, jobjec } jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading Loading @@ -120,35 +122,30 @@ static jint android_server_UsbDeviceManager_getAudioMode(JNIEnv* /* env */, jobj } static jobject android_server_UsbDeviceManager_openControl(JNIEnv *env, jobject /* thiz */, jstring jFunction) { const char *function = env->GetStringUTFChars(jFunction, NULL); ScopedUtfChars function(env, jFunction); bool ptp = false; int fd = -1; if (!strcmp(function, "ptp")) { if (!strcmp(function.c_str(), "ptp")) { ptp = true; } if (!strcmp(function, "mtp") || ptp) { if (!strcmp(function.c_str(), "mtp") || ptp) { fd = TEMP_FAILURE_RETRY(open(ptp ? FFS_PTP_EP0 : FFS_MTP_EP0, O_RDWR)); if (fd < 0) { ALOGE("could not open control for %s %s", function, strerror(errno)); goto error; ALOGE("could not open control for %s %s", function.c_str(), strerror(errno)); return NULL; } if (!writeDescriptors(fd, ptp)) { goto error; close(fd); return NULL; } } if (function != NULL) { env->ReleaseStringUTFChars(jFunction, function); } return jniCreateFileDescriptor(env, fd); error: if (fd != -1) { jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == NULL) { // OutOfMemoryError will be pending. close(fd); } if (function != NULL) { env->ReleaseStringUTFChars(jFunction, function); } return NULL; return jifd; } static const JNINativeMethod method_table[] = { Loading services/core/jni/com_android_server_UsbHostManager.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ static jobject android_server_UsbHostManager_openDevice(JNIEnv *env, jobject /* jobject fileDescriptor = jniCreateFileDescriptor(env, newFD); if (fileDescriptor == NULL) { close(newFD); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading Loading
core/jni/android_os_Parcel.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -510,7 +510,11 @@ static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, j if (fd < 0) return NULL; fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); if (fd < 0) return NULL; return jniCreateFileDescriptor(env, fd); jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == NULL) { close(fd); } return jifd; } return NULL; } Loading
core/jni/android_os_SharedMemory.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,11 @@ jobject SharedMemory_nCreate(JNIEnv* env, jobject, jstring jname, jint size) { return nullptr; } return jniCreateFileDescriptor(env, fd); jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == nullptr) { close(fd); } return jifd; } jint SharedMemory_nGetSize(JNIEnv* env, jobject, jobject fileDescriptor) { Loading
services/core/jni/com_android_server_SerialService.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ static jobject android_server_SerialService_open(JNIEnv *env, jobject /* thiz */ jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading
services/core/jni/com_android_server_UsbDeviceManager.cpp +13 −16 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedUtfChars.h> #include "android_runtime/AndroidRuntime.h" #include "android_runtime/Log.h" #include "MtpDescriptors.h" Loading Loading @@ -88,6 +89,7 @@ static jobject android_server_UsbDeviceManager_openAccessory(JNIEnv *env, jobjec } jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading Loading @@ -120,35 +122,30 @@ static jint android_server_UsbDeviceManager_getAudioMode(JNIEnv* /* env */, jobj } static jobject android_server_UsbDeviceManager_openControl(JNIEnv *env, jobject /* thiz */, jstring jFunction) { const char *function = env->GetStringUTFChars(jFunction, NULL); ScopedUtfChars function(env, jFunction); bool ptp = false; int fd = -1; if (!strcmp(function, "ptp")) { if (!strcmp(function.c_str(), "ptp")) { ptp = true; } if (!strcmp(function, "mtp") || ptp) { if (!strcmp(function.c_str(), "mtp") || ptp) { fd = TEMP_FAILURE_RETRY(open(ptp ? FFS_PTP_EP0 : FFS_MTP_EP0, O_RDWR)); if (fd < 0) { ALOGE("could not open control for %s %s", function, strerror(errno)); goto error; ALOGE("could not open control for %s %s", function.c_str(), strerror(errno)); return NULL; } if (!writeDescriptors(fd, ptp)) { goto error; close(fd); return NULL; } } if (function != NULL) { env->ReleaseStringUTFChars(jFunction, function); } return jniCreateFileDescriptor(env, fd); error: if (fd != -1) { jobject jifd = jniCreateFileDescriptor(env, fd); if (jifd == NULL) { // OutOfMemoryError will be pending. close(fd); } if (function != NULL) { env->ReleaseStringUTFChars(jFunction, function); } return NULL; return jifd; } static const JNINativeMethod method_table[] = { Loading
services/core/jni/com_android_server_UsbHostManager.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ static jobject android_server_UsbHostManager_openDevice(JNIEnv *env, jobject /* jobject fileDescriptor = jniCreateFileDescriptor(env, newFD); if (fileDescriptor == NULL) { close(newFD); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, Loading