summaryrefslogtreecommitdiffstats
path: root/core/jni/android_net_TrafficStats.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2011-04-12 16:12:09 -0700
committerElliott Hughes <enh@google.com>2011-04-13 10:34:23 -0700
commitf17b971a75577a3a0e5ab574618e0756d167f5d4 (patch)
tree9a6577102a098b8d526ec634846aa5da35de4288 /core/jni/android_net_TrafficStats.cpp
parent83b61471c39fc4d5afc9f56c3ed771a14c8ad194 (diff)
downloadframeworks_base-f17b971a75577a3a0e5ab574618e0756d167f5d4.zip
frameworks_base-f17b971a75577a3a0e5ab574618e0756d167f5d4.tar.gz
frameworks_base-f17b971a75577a3a0e5ab574618e0756d167f5d4.tar.bz2
More native code cleanup.
Use ScopedUtfChars (fixes a leak in TrafficStats, and fixes a crash in Wifi in a case where GetStringChars could have been called with a pending exception). Change-Id: I3465ff392b4038dfdafa6af80ec1314cc6d6a11c
Diffstat (limited to 'core/jni/android_net_TrafficStats.cpp')
-rw-r--r--core/jni/android_net_TrafficStats.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index 0c84f11..203b5ef 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -25,6 +25,7 @@
#include <android_runtime/AndroidRuntime.h>
#include <cutils/logger.h>
#include <jni.h>
+#include <ScopedUtfChars.h>
#include <utils/misc.h>
#include <utils/Log.h>
@@ -130,13 +131,14 @@ static jlong getMobileRxBytes(JNIEnv* env, jobject clazz) {
"/sys/class/net/ppp0/statistics/rx_bytes");
}
-static jlong getData(JNIEnv* env, char *what, jstring interface) {
- char filename[80];
- jboolean isCopy;
-
- const char *interfaceStr = env->GetStringUTFChars(interface, &isCopy);
- snprintf(filename, sizeof(filename), "/sys/class/net/%s/statistics/%s", interfaceStr, what);
+static jlong getData(JNIEnv* env, const char* what, jstring javaInterface) {
+ ScopedUtfChars interface(env, javaInterface);
+ if (interface.c_str() == NULL) {
+ return -1;
+ }
+ char filename[80];
+ snprintf(filename, sizeof(filename), "/sys/class/net/%s/statistics/%s", interface.c_str(), what);
return readNumber(filename);
}