diff options
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android_net_LocalSocketImpl.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp index b9ed28e..9f79f74 100644 --- a/core/jni/android_net_LocalSocketImpl.cpp +++ b/core/jni/android_net_LocalSocketImpl.cpp @@ -35,6 +35,7 @@ #include <cutils/sockets.h> #include <netinet/tcp.h> +#include <ScopedUtfChars.h> namespace android { @@ -52,25 +53,22 @@ socket_connect_local(JNIEnv *env, jobject object, jobject fileDescriptor, jstring name, jint namespaceId) { int ret; - const char *nameUtf8; int fd; - nameUtf8 = env->GetStringUTFChars(name, NULL); - fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if (env->ExceptionOccurred() != NULL) { return; } + ScopedUtfChars nameUtf8(env, name); + ret = socket_local_client_connect( fd, - nameUtf8, + nameUtf8.c_str(), namespaceId, SOCK_STREAM); - env->ReleaseStringUTFChars(name, nameUtf8); - if (ret < 0) { jniThrowIOException(env, errno); return; @@ -89,11 +87,10 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor, { int ret; int fd; - const char *nameUtf8; - if (name == NULL) { jniThrowNullPointerException(env, NULL); + return; } fd = jniGetFDFromFileDescriptor(env, fileDescriptor); @@ -102,11 +99,9 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor, return; } - nameUtf8 = env->GetStringUTFChars(name, NULL); - - ret = socket_local_server_bind(fd, nameUtf8, namespaceId); + ScopedUtfChars nameUtf8(env, name); - env->ReleaseStringUTFChars(name, nameUtf8); + ret = socket_local_server_bind(fd, nameUtf8.c_str(), namespaceId); if (ret < 0) { jniThrowIOException(env, errno); @@ -451,6 +446,7 @@ static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg) if (count < 0) { jniThrowException(env, "java/io/IOException", "invalid cmsg length"); + return -1; } fdArray = env->NewObjectArray(count, class_FileDescriptor, NULL); |