diff options
author | Mark Salyzyn <salyzyn@google.com> | 2014-10-02 11:12:28 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2015-02-09 22:12:59 +0000 |
commit | 956870518ee89b5302b8409ac78f287bf091d9ed (patch) | |
tree | a6b832d88bf2871e6a7fe59be7108da1561ab08a /liblog | |
parent | 3bc8ae63ce3bbcc0ab61def99a4e9b4822ba3f51 (diff) | |
download | system_core-956870518ee89b5302b8409ac78f287bf091d9ed.zip system_core-956870518ee89b5302b8409ac78f287bf091d9ed.tar.gz system_core-956870518ee89b5302b8409ac78f287bf091d9ed.tar.bz2 |
liblog: add __android_log_is_loggable()
- Add new liblog API __android_log_is_loggable(prio, tag, def)
- future plan to integrate this into the runtime checks and into
the logd daemon for filtration. Inert for now.
Bug: 17760225
Change-Id: I16395b4d42acc08f0209f55a1cbf87b0b2112898
Diffstat (limited to 'liblog')
-rw-r--r-- | liblog/Android.mk | 2 | ||||
-rw-r--r-- | liblog/fake_log_device.c | 6 | ||||
-rw-r--r-- | liblog/log_is_loggable.c | 69 | ||||
-rw-r--r-- | liblog/log_read.c | 4 |
4 files changed, 80 insertions, 1 deletions
diff --git a/liblog/Android.mk b/liblog/Android.mk index a4e5f5e..5756c54 100644 --- a/liblog/Android.mk +++ b/liblog/Android.mk @@ -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 diff --git a/liblog/fake_log_device.c b/liblog/fake_log_device.c index cf3dc50..8a8ece2 100644 --- a/liblog/fake_log_device.c +++ b/liblog/fake_log_device.c @@ -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; +} diff --git a/liblog/log_is_loggable.c b/liblog/log_is_loggable.c new file mode 100644 index 0000000..df67123 --- /dev/null +++ b/liblog/log_is_loggable.c @@ -0,0 +1,69 @@ +/* +** 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; +} diff --git a/liblog/log_read.c b/liblog/log_read.c index 2f21a5d..dbed886 100644 --- a/liblog/log_read.c +++ b/liblog/log_read.c @@ -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 |