diff options
Diffstat (limited to 'core/jni/android_util_Log.cpp')
-rw-r--r-- | core/jni/android_util_Log.cpp | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp index a57aad7..2895171 100644 --- a/core/jni/android_util_Log.cpp +++ b/core/jni/android_util_Log.cpp @@ -27,6 +27,7 @@ #include "JNIHelp.h" #include "utils/misc.h" #include "android_runtime/AndroidRuntime.h" +#include "android_util_Log.h" #define MIN(a,b) ((a<b)?a:b) @@ -56,40 +57,48 @@ static int toLevel(const char* value) return levels.info; } -static jboolean android_util_Log_isLoggable(JNIEnv* env, jobject clazz, jstring tag, jint level) -{ - int len; - char key[PROPERTY_KEY_MAX]; +static jboolean isLoggable(const char* tag, jint level) { + String8 key; + key.append(LOG_NAMESPACE); + key.append(tag); + char buf[PROPERTY_VALUE_MAX]; + if (property_get(key.string(), buf, "") <= 0) { + return false; + } + int logLevel = toLevel(buf); + return logLevel >= 0 && level >= logLevel; +} + +static jboolean android_util_Log_isLoggable(JNIEnv* env, jobject clazz, jstring tag, jint level) +{ if (tag == NULL) { return false; } - jboolean result = false; - const char* chars = env->GetStringUTFChars(tag, NULL); + if (!chars) { + return false; + } + jboolean result = false; if ((strlen(chars)+sizeof(LOG_NAMESPACE)) > PROPERTY_KEY_MAX) { char buf2[200]; snprintf(buf2, sizeof(buf2), "Log tag \"%s\" exceeds limit of %d characters\n", chars, PROPERTY_KEY_MAX - sizeof(LOG_NAMESPACE)); - // release the chars! - env->ReleaseStringUTFChars(tag, chars); - jniThrowException(env, "java/lang/IllegalArgumentException", buf2); - return false; } else { - strncpy(key, LOG_NAMESPACE, sizeof(LOG_NAMESPACE)-1); - strcpy(key + sizeof(LOG_NAMESPACE) - 1, chars); + result = isLoggable(chars, level); } env->ReleaseStringUTFChars(tag, chars); + return result; +} - len = property_get(key, buf, ""); - int logLevel = toLevel(buf); - return (logLevel >= 0 && level >= logLevel) ? true : false; +bool android_util_Log_isVerboseLogEnabled(const char* tag) { + return isLoggable(tag, levels.verbose); } /* |