Loading include/log/log.h +6 −0 Original line number Diff line number Diff line Loading @@ -555,6 +555,12 @@ typedef enum log_id { #define sizeof_log_id_t sizeof(typeof_log_id_t) #define typeof_log_id_t unsigned char /* * Use the per-tag properties "log.tag.<tagname>" to generate a runtime * result of non-zero to expose a log. */ int __android_log_is_loggable(int prio, const char *tag, int def); /* * Send a simple string to the log. */ Loading liblog/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ else endif liblog_host_sources := $(liblog_sources) fake_log_device.c liblog_target_sources := $(liblog_sources) log_time.cpp liblog_target_sources := $(liblog_sources) log_time.cpp log_is_loggable.c ifneq ($(TARGET_USES_LOGD),false) liblog_target_sources += log_read.c else Loading liblog/fake_log_device.c +6 −0 Original line number Diff line number Diff line Loading @@ -689,3 +689,9 @@ ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) /* Assume that open() was called first. */ return redirectWritev(fd, vector, count); } int __android_log_is_loggable(int prio, const char *tag __unused, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; } liblog/log_is_loggable.c 0 → 100644 +69 −0 Original line number Diff line number Diff line /* ** Copyright 2014, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include <ctype.h> #include <string.h> #include <sys/system_properties.h> #include <android/log.h> static int __android_log_level(const char *tag, int def) { char buf[PROP_VALUE_MAX]; if (!tag || !*tag) { return def; } { static const char log_namespace[] = "log.tag."; char key[sizeof(log_namespace) + strlen(tag)]; strcpy(key, log_namespace); strcpy(key + sizeof(log_namespace) - 1, tag); if (__system_property_get(key + 8, buf) <= 0) { buf[0] = '\0'; } } switch (toupper(buf[0])) { case 'V': return ANDROID_LOG_VERBOSE; case 'D': return ANDROID_LOG_DEBUG; case 'I': return ANDROID_LOG_INFO; case 'W': return ANDROID_LOG_WARN; case 'E': return ANDROID_LOG_ERROR; case 'F': /* FALLTHRU */ /* Not officially supported */ case 'A': return ANDROID_LOG_FATAL; case 'S': return -1; /* ANDROID_LOG_SUPPRESS */ } return def; } int __android_log_is_loggable(int prio, const char *tag, int def) { static char user; int logLevel; if (user == 0) { char buf[PROP_VALUE_MAX]; if (__system_property_get("ro.build.type", buf) <= 0) { buf[0] = '\0'; } user = strcmp(buf, "user") ? -1 : 1; } logLevel = (user == 1) ? def : __android_log_level(tag, def); return logLevel >= 0 && prio >= logLevel; } liblog/log_read.c +4 −0 Original line number Diff line number Diff line Loading @@ -34,7 +34,11 @@ /* branchless on many architectures. */ #define min(x,y) ((y) ^ (((x) ^ (y)) & -((x) < (y)))) #if (defined(USE_MINGW) || defined(HAVE_WINSOCK)) #define WEAK static #else #define WEAK __attribute__((weak)) #endif #ifndef __unused #define __unused __attribute__((unused)) #endif Loading Loading
include/log/log.h +6 −0 Original line number Diff line number Diff line Loading @@ -555,6 +555,12 @@ typedef enum log_id { #define sizeof_log_id_t sizeof(typeof_log_id_t) #define typeof_log_id_t unsigned char /* * Use the per-tag properties "log.tag.<tagname>" to generate a runtime * result of non-zero to expose a log. */ int __android_log_is_loggable(int prio, const char *tag, int def); /* * Send a simple string to the log. */ Loading
liblog/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ else endif liblog_host_sources := $(liblog_sources) fake_log_device.c liblog_target_sources := $(liblog_sources) log_time.cpp liblog_target_sources := $(liblog_sources) log_time.cpp log_is_loggable.c ifneq ($(TARGET_USES_LOGD),false) liblog_target_sources += log_read.c else Loading
liblog/fake_log_device.c +6 −0 Original line number Diff line number Diff line Loading @@ -689,3 +689,9 @@ ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) /* Assume that open() was called first. */ return redirectWritev(fd, vector, count); } int __android_log_is_loggable(int prio, const char *tag __unused, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; }
liblog/log_is_loggable.c 0 → 100644 +69 −0 Original line number Diff line number Diff line /* ** Copyright 2014, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include <ctype.h> #include <string.h> #include <sys/system_properties.h> #include <android/log.h> static int __android_log_level(const char *tag, int def) { char buf[PROP_VALUE_MAX]; if (!tag || !*tag) { return def; } { static const char log_namespace[] = "log.tag."; char key[sizeof(log_namespace) + strlen(tag)]; strcpy(key, log_namespace); strcpy(key + sizeof(log_namespace) - 1, tag); if (__system_property_get(key + 8, buf) <= 0) { buf[0] = '\0'; } } switch (toupper(buf[0])) { case 'V': return ANDROID_LOG_VERBOSE; case 'D': return ANDROID_LOG_DEBUG; case 'I': return ANDROID_LOG_INFO; case 'W': return ANDROID_LOG_WARN; case 'E': return ANDROID_LOG_ERROR; case 'F': /* FALLTHRU */ /* Not officially supported */ case 'A': return ANDROID_LOG_FATAL; case 'S': return -1; /* ANDROID_LOG_SUPPRESS */ } return def; } int __android_log_is_loggable(int prio, const char *tag, int def) { static char user; int logLevel; if (user == 0) { char buf[PROP_VALUE_MAX]; if (__system_property_get("ro.build.type", buf) <= 0) { buf[0] = '\0'; } user = strcmp(buf, "user") ? -1 : 1; } logLevel = (user == 1) ? def : __android_log_level(tag, def); return logLevel >= 0 && prio >= logLevel; }
liblog/log_read.c +4 −0 Original line number Diff line number Diff line Loading @@ -34,7 +34,11 @@ /* branchless on many architectures. */ #define min(x,y) ((y) ^ (((x) ^ (y)) & -((x) < (y)))) #if (defined(USE_MINGW) || defined(HAVE_WINSOCK)) #define WEAK static #else #define WEAK __attribute__((weak)) #endif #ifndef __unused #define __unused __attribute__((unused)) #endif Loading