Loading liblog/Android.bp +18 −18 Original line number Diff line number Diff line Loading @@ -15,30 +15,30 @@ // liblog_sources = [ "config_read.c", "config_write.c", "log_event_list.c", "log_event_write.c", "config_read.cpp", "config_write.cpp", "log_event_list.cpp", "log_event_write.cpp", "log_ratelimit.cpp", "logger_lock.c", "logger_name.c", "logger_read.c", "logger_write.c", "logprint.c", "stderr_write.c", "logger_lock.cpp", "logger_name.cpp", "logger_read.cpp", "logger_write.cpp", "logprint.cpp", "stderr_write.cpp", ] liblog_host_sources = [ "fake_log_device.c", "fake_writer.c", "fake_log_device.cpp", "fake_writer.cpp", ] liblog_target_sources = [ "event_tag_map.cpp", "log_time.cpp", "properties.c", "pmsg_reader.c", "pmsg_writer.c", "logd_reader.c", "logd_writer.c", "properties.cpp", "pmsg_reader.cpp", "pmsg_writer.cpp", "logd_reader.cpp", "logd_writer.cpp", ] cc_library_headers { Loading Loading @@ -86,7 +86,7 @@ cc_library { ldflags: ["-Wl,--hash-style=both"], }, windows: { srcs: ["uio.c"], srcs: ["uio.cpp"], enabled: true, }, not_windows: { Loading liblog/config_read.c→liblog/config_read.cpp +11 −14 Original line number Diff line number Diff line Loading @@ -19,23 +19,21 @@ #include "config_read.h" #include "logger.h" LIBLOG_HIDDEN struct listnode __android_log_transport_read = { &__android_log_transport_read, &__android_log_transport_read }; LIBLOG_HIDDEN struct listnode __android_log_persist_read = { &__android_log_persist_read, &__android_log_persist_read }; LIBLOG_HIDDEN struct listnode __android_log_transport_read = {&__android_log_transport_read, &__android_log_transport_read}; LIBLOG_HIDDEN struct listnode __android_log_persist_read = {&__android_log_persist_read, &__android_log_persist_read}; static void __android_log_add_transport( struct listnode* list, struct android_log_transport_read* transport) { size_t i; static void __android_log_add_transport(struct listnode* list, struct android_log_transport_read* transport) { uint32_t i; /* Try to keep one functioning transport for each log buffer id */ for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) { struct android_log_transport_read* transp; if (list_empty(list)) { if (!transport->available || ((*transport->available)(i) >= 0)) { if (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0)) { list_add_tail(list, &transport->node); return; } Loading @@ -44,8 +42,8 @@ static void __android_log_add_transport( if (!transp->available) { return; } if (((*transp->available)(i) < 0) && (!transport->available || ((*transport->available)(i) >= 0))) { if (((*transp->available)(static_cast<log_id_t>(i)) < 0) && (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0))) { list_add_tail(list, &transport->node); return; } Loading @@ -56,8 +54,7 @@ static void __android_log_add_transport( LIBLOG_HIDDEN void __android_log_config_read() { #if (FAKE_LOG_DEVICE == 0) if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { extern struct android_log_transport_read logdLoggerRead; extern struct android_log_transport_read pmsgLoggerRead; Loading liblog/config_write.c→liblog/config_write.cpp +15 −22 Original line number Diff line number Diff line Loading @@ -19,23 +19,21 @@ #include "config_write.h" #include "logger.h" LIBLOG_HIDDEN struct listnode __android_log_transport_write = { &__android_log_transport_write, &__android_log_transport_write }; LIBLOG_HIDDEN struct listnode __android_log_persist_write = { &__android_log_persist_write, &__android_log_persist_write }; LIBLOG_HIDDEN struct listnode __android_log_transport_write = {&__android_log_transport_write, &__android_log_transport_write}; LIBLOG_HIDDEN struct listnode __android_log_persist_write = {&__android_log_persist_write, &__android_log_persist_write}; static void __android_log_add_transport( struct listnode* list, struct android_log_transport_write* transport) { size_t i; static void __android_log_add_transport(struct listnode* list, struct android_log_transport_write* transport) { uint32_t i; /* Try to keep one functioning transport for each log buffer id */ for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) { struct android_log_transport_write* transp; if (list_empty(list)) { if (!transport->available || ((*transport->available)(i) >= 0)) { if (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0)) { list_add_tail(list, &transport->node); return; } Loading @@ -44,8 +42,8 @@ static void __android_log_add_transport( if (!transp->available) { return; } if (((*transp->available)(i) < 0) && (!transport->available || ((*transport->available)(i) >= 0))) { if (((*transp->available)(static_cast<log_id_t>(i)) < 0) && (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0))) { list_add_tail(list, &transport->node); return; } Loading @@ -55,20 +53,17 @@ static void __android_log_add_transport( } LIBLOG_HIDDEN void __android_log_config_write() { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { #if (FAKE_LOG_DEVICE == 0) extern struct android_log_transport_write logdLoggerWrite; extern struct android_log_transport_write pmsgLoggerWrite; __android_log_add_transport(&__android_log_transport_write, &logdLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &logdLoggerWrite); __android_log_add_transport(&__android_log_persist_write, &pmsgLoggerWrite); #else extern struct android_log_transport_write fakeLoggerWrite; __android_log_add_transport(&__android_log_transport_write, &fakeLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &fakeLoggerWrite); #endif } Loading @@ -81,8 +76,7 @@ LIBLOG_HIDDEN void __android_log_config_write() { * Remember we can be called here if we are already initialized. */ if (list_empty(&__android_log_transport_write)) { __android_log_add_transport(&__android_log_transport_write, &stderrLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &stderrLoggerWrite); } else { struct android_log_transport_write* transp; write_transport_for_each(transp, &__android_log_transport_write) { Loading @@ -90,8 +84,7 @@ LIBLOG_HIDDEN void __android_log_config_write() { return; } } __android_log_add_transport(&__android_log_persist_write, &stderrLoggerWrite); __android_log_add_transport(&__android_log_persist_write, &stderrLoggerWrite); } } } Loading liblog/fake_log_device.c→liblog/fake_log_device.cpp +31 −49 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ * Intercepts log messages intended for the Android log device. * Messages are printed to stderr. */ #include "fake_log_device.h" #include <ctype.h> #include <errno.h> #include <fcntl.h> Loading @@ -32,7 +35,6 @@ #include <android/log.h> #include <log/uio.h> #include "fake_log_device.h" #include "log_portability.h" #define kMaxTagLen 16 /* from the long-dead utils/Log.cpp */ Loading Loading @@ -181,8 +183,7 @@ static void configureInitialState(const char* pathName, LogState* logState) { logState->debugName[sizeof(logState->debugName) - 1] = '\0'; /* identify binary logs */ if (!strcmp(pathName + kDevLogLen, "events") || !strcmp(pathName + kDevLogLen, "security")) { if (!strcmp(pathName + kDevLogLen, "events") || !strcmp(pathName + kDevLogLen, "security")) { logState->isBinary = 1; } Loading @@ -204,8 +205,7 @@ static void configureInitialState(const char* pathName, LogState* logState) { while (isspace(*tags)) tags++; i = 0; while (*tags != '\0' && !isspace(*tags) && *tags != ':' && i < kMaxTagLen) { while (*tags != '\0' && !isspace(*tags) && *tags != ':' && i < kMaxTagLen) { tagName[i++] = *tags++; } if (i == kMaxTagLen) { Loading Loading @@ -313,13 +313,11 @@ static void configureInitialState(const char* pathName, LogState* logState) { */ static const char* getPriorityString(int priority) { /* the first character of each string should be unique */ static const char* priorityStrings[] = { "Verbose", "Debug", "Info", "Warn", "Error", "Assert" }; static const char* priorityStrings[] = {"Verbose", "Debug", "Info", "Warn", "Error", "Assert"}; int idx; idx = (int)priority - (int)ANDROID_LOG_VERBOSE; if (idx < 0 || idx >= (int)(sizeof(priorityStrings) / sizeof(priorityStrings[0]))) if (idx < 0 || idx >= (int)(sizeof(priorityStrings) / sizeof(priorityStrings[0]))) return "?unknown?"; return priorityStrings[idx]; } Loading Loading @@ -351,8 +349,7 @@ static ssize_t fake_writev(int fd, const struct iovec* iov, int iovcnt) { * * Log format parsing taken from the long-dead utils/Log.cpp. */ static void showLog(LogState* state, int logPrio, const char* tag, const char* msg) { static void showLog(LogState* state, int logPrio, const char* tag, const char* msg) { #if !defined(_WIN32) struct tm tmBuf; #endif Loading Loading @@ -397,19 +394,16 @@ static void showLog(LogState* state, int logPrio, const char* tag, switch (state->outputFormat) { case FORMAT_TAG: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s: ", priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s: ", priChar, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_PROCESS: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d) ", priChar, pid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d) ", priChar, pid); suffixLen = snprintf(suffixBuf, sizeof(suffixBuf), " (%s)\n", tag); break; case FORMAT_THREAD: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d:%5d) ", priChar, pid, tid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d:%5d) ", priChar, pid, tid); strcpy(suffixBuf, "\n"); suffixLen = 1; break; Loading @@ -420,28 +414,24 @@ static void showLog(LogState* state, int logPrio, const char* tag, suffixLen = 1; break; case FORMAT_TIME: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %-8s\n\t", timeBuf, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %-8s\n\t", timeBuf, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_THREADTIME: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d %5d %c %-8s \n\t", timeBuf, pid, tid, priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d %5d %c %-8s \n\t", timeBuf, pid, tid, priChar, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_LONG: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "[ %s %5d:%5d %c/%-8s ]\n", timeBuf, pid, tid, priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "[ %s %5d:%5d %c/%-8s ]\n", timeBuf, pid, tid, priChar, tag); strcpy(suffixBuf, "\n\n"); suffixLen = 2; break; default: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s(%5d): ", priChar, tag, pid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s(%5d): ", priChar, tag, pid); strcpy(suffixBuf, "\n"); suffixLen = 1; break; Loading Loading @@ -559,8 +549,7 @@ static void showLog(LogState* state, int logPrio, const char* tag, * tag (N bytes -- null-terminated ASCII string) * message (N bytes -- null-terminated ASCII string) */ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) { LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) { LogState* state; /* Make sure that no-one frees the LogState while we're using it. Loading @@ -572,17 +561,24 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, state = fdToLogState(fd); if (state == NULL) { errno = EBADF; goto error; unlock(); return -1; } if (state->isBinary) { TRACE("%s: ignoring binary log\n", state->debugName); goto bail; unlock(); int len = 0; for (int i = 0; i < count; ++i) { len += vector[i].iov_len; } return len; } if (count != 3) { TRACE("%s: writevLog with count=%d not expected\n", state->debugName, count); goto error; unlock(); return -1; } /* pull out the three fields */ Loading @@ -598,7 +594,6 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, break; /* reached end of configured values */ if (strcmp(state->tagSet[i].tag, tag) == 0) { // TRACE("MATCH tag '%s'\n", tag); minPrio = state->tagSet[i].minPriority; break; } Loading @@ -606,21 +601,14 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, if (logPrio >= minPrio) { showLog(state, logPrio, tag, msg); } else { // TRACE("+++ NOLOG(%d): %s %s", logPrio, tag, msg); } bail: unlock(); int len = 0; for (i = 0; i < count; ++i) { len += vector[i].iov_len; } return len; error: unlock(); return -1; } /* Loading Loading @@ -663,22 +651,16 @@ LIBLOG_HIDDEN int fakeLogOpen(const char* pathName) { return fd; } LIBLOG_HIDDEN ssize_t __send_log_msg(char* buf __unused, size_t buf_size __unused) { LIBLOG_HIDDEN ssize_t __send_log_msg(char*, size_t) { return -ENODEV; } LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char* tag __unused, int def) { LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char*, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; } LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char* tag __unused, size_t len __unused, int def) { LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char*, size_t, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; } Loading liblog/fake_log_device.h +9 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,18 @@ struct iovec; __BEGIN_DECLS LIBLOG_HIDDEN int fakeLogOpen(const char* pathName); LIBLOG_HIDDEN int fakeLogClose(int fd); LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count); LIBLOG_HIDDEN ssize_t __send_log_msg(char*, size_t); LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char*, int def); LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char*, size_t, int def); LIBLOG_ABI_PRIVATE int __android_log_is_debuggable(); __END_DECLS #endif // _LIBLOG_FAKE_LOG_DEVICE_H Loading
liblog/Android.bp +18 −18 Original line number Diff line number Diff line Loading @@ -15,30 +15,30 @@ // liblog_sources = [ "config_read.c", "config_write.c", "log_event_list.c", "log_event_write.c", "config_read.cpp", "config_write.cpp", "log_event_list.cpp", "log_event_write.cpp", "log_ratelimit.cpp", "logger_lock.c", "logger_name.c", "logger_read.c", "logger_write.c", "logprint.c", "stderr_write.c", "logger_lock.cpp", "logger_name.cpp", "logger_read.cpp", "logger_write.cpp", "logprint.cpp", "stderr_write.cpp", ] liblog_host_sources = [ "fake_log_device.c", "fake_writer.c", "fake_log_device.cpp", "fake_writer.cpp", ] liblog_target_sources = [ "event_tag_map.cpp", "log_time.cpp", "properties.c", "pmsg_reader.c", "pmsg_writer.c", "logd_reader.c", "logd_writer.c", "properties.cpp", "pmsg_reader.cpp", "pmsg_writer.cpp", "logd_reader.cpp", "logd_writer.cpp", ] cc_library_headers { Loading Loading @@ -86,7 +86,7 @@ cc_library { ldflags: ["-Wl,--hash-style=both"], }, windows: { srcs: ["uio.c"], srcs: ["uio.cpp"], enabled: true, }, not_windows: { Loading
liblog/config_read.c→liblog/config_read.cpp +11 −14 Original line number Diff line number Diff line Loading @@ -19,23 +19,21 @@ #include "config_read.h" #include "logger.h" LIBLOG_HIDDEN struct listnode __android_log_transport_read = { &__android_log_transport_read, &__android_log_transport_read }; LIBLOG_HIDDEN struct listnode __android_log_persist_read = { &__android_log_persist_read, &__android_log_persist_read }; LIBLOG_HIDDEN struct listnode __android_log_transport_read = {&__android_log_transport_read, &__android_log_transport_read}; LIBLOG_HIDDEN struct listnode __android_log_persist_read = {&__android_log_persist_read, &__android_log_persist_read}; static void __android_log_add_transport( struct listnode* list, struct android_log_transport_read* transport) { size_t i; static void __android_log_add_transport(struct listnode* list, struct android_log_transport_read* transport) { uint32_t i; /* Try to keep one functioning transport for each log buffer id */ for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) { struct android_log_transport_read* transp; if (list_empty(list)) { if (!transport->available || ((*transport->available)(i) >= 0)) { if (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0)) { list_add_tail(list, &transport->node); return; } Loading @@ -44,8 +42,8 @@ static void __android_log_add_transport( if (!transp->available) { return; } if (((*transp->available)(i) < 0) && (!transport->available || ((*transport->available)(i) >= 0))) { if (((*transp->available)(static_cast<log_id_t>(i)) < 0) && (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0))) { list_add_tail(list, &transport->node); return; } Loading @@ -56,8 +54,7 @@ static void __android_log_add_transport( LIBLOG_HIDDEN void __android_log_config_read() { #if (FAKE_LOG_DEVICE == 0) if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { extern struct android_log_transport_read logdLoggerRead; extern struct android_log_transport_read pmsgLoggerRead; Loading
liblog/config_write.c→liblog/config_write.cpp +15 −22 Original line number Diff line number Diff line Loading @@ -19,23 +19,21 @@ #include "config_write.h" #include "logger.h" LIBLOG_HIDDEN struct listnode __android_log_transport_write = { &__android_log_transport_write, &__android_log_transport_write }; LIBLOG_HIDDEN struct listnode __android_log_persist_write = { &__android_log_persist_write, &__android_log_persist_write }; LIBLOG_HIDDEN struct listnode __android_log_transport_write = {&__android_log_transport_write, &__android_log_transport_write}; LIBLOG_HIDDEN struct listnode __android_log_persist_write = {&__android_log_persist_write, &__android_log_persist_write}; static void __android_log_add_transport( struct listnode* list, struct android_log_transport_write* transport) { size_t i; static void __android_log_add_transport(struct listnode* list, struct android_log_transport_write* transport) { uint32_t i; /* Try to keep one functioning transport for each log buffer id */ for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) { struct android_log_transport_write* transp; if (list_empty(list)) { if (!transport->available || ((*transport->available)(i) >= 0)) { if (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0)) { list_add_tail(list, &transport->node); return; } Loading @@ -44,8 +42,8 @@ static void __android_log_add_transport( if (!transp->available) { return; } if (((*transp->available)(i) < 0) && (!transport->available || ((*transport->available)(i) >= 0))) { if (((*transp->available)(static_cast<log_id_t>(i)) < 0) && (!transport->available || ((*transport->available)(static_cast<log_id_t>(i)) >= 0))) { list_add_tail(list, &transport->node); return; } Loading @@ -55,20 +53,17 @@ static void __android_log_add_transport( } LIBLOG_HIDDEN void __android_log_config_write() { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { if ((__android_log_transport == LOGGER_DEFAULT) || (__android_log_transport & LOGGER_LOGD)) { #if (FAKE_LOG_DEVICE == 0) extern struct android_log_transport_write logdLoggerWrite; extern struct android_log_transport_write pmsgLoggerWrite; __android_log_add_transport(&__android_log_transport_write, &logdLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &logdLoggerWrite); __android_log_add_transport(&__android_log_persist_write, &pmsgLoggerWrite); #else extern struct android_log_transport_write fakeLoggerWrite; __android_log_add_transport(&__android_log_transport_write, &fakeLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &fakeLoggerWrite); #endif } Loading @@ -81,8 +76,7 @@ LIBLOG_HIDDEN void __android_log_config_write() { * Remember we can be called here if we are already initialized. */ if (list_empty(&__android_log_transport_write)) { __android_log_add_transport(&__android_log_transport_write, &stderrLoggerWrite); __android_log_add_transport(&__android_log_transport_write, &stderrLoggerWrite); } else { struct android_log_transport_write* transp; write_transport_for_each(transp, &__android_log_transport_write) { Loading @@ -90,8 +84,7 @@ LIBLOG_HIDDEN void __android_log_config_write() { return; } } __android_log_add_transport(&__android_log_persist_write, &stderrLoggerWrite); __android_log_add_transport(&__android_log_persist_write, &stderrLoggerWrite); } } } Loading
liblog/fake_log_device.c→liblog/fake_log_device.cpp +31 −49 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ * Intercepts log messages intended for the Android log device. * Messages are printed to stderr. */ #include "fake_log_device.h" #include <ctype.h> #include <errno.h> #include <fcntl.h> Loading @@ -32,7 +35,6 @@ #include <android/log.h> #include <log/uio.h> #include "fake_log_device.h" #include "log_portability.h" #define kMaxTagLen 16 /* from the long-dead utils/Log.cpp */ Loading Loading @@ -181,8 +183,7 @@ static void configureInitialState(const char* pathName, LogState* logState) { logState->debugName[sizeof(logState->debugName) - 1] = '\0'; /* identify binary logs */ if (!strcmp(pathName + kDevLogLen, "events") || !strcmp(pathName + kDevLogLen, "security")) { if (!strcmp(pathName + kDevLogLen, "events") || !strcmp(pathName + kDevLogLen, "security")) { logState->isBinary = 1; } Loading @@ -204,8 +205,7 @@ static void configureInitialState(const char* pathName, LogState* logState) { while (isspace(*tags)) tags++; i = 0; while (*tags != '\0' && !isspace(*tags) && *tags != ':' && i < kMaxTagLen) { while (*tags != '\0' && !isspace(*tags) && *tags != ':' && i < kMaxTagLen) { tagName[i++] = *tags++; } if (i == kMaxTagLen) { Loading Loading @@ -313,13 +313,11 @@ static void configureInitialState(const char* pathName, LogState* logState) { */ static const char* getPriorityString(int priority) { /* the first character of each string should be unique */ static const char* priorityStrings[] = { "Verbose", "Debug", "Info", "Warn", "Error", "Assert" }; static const char* priorityStrings[] = {"Verbose", "Debug", "Info", "Warn", "Error", "Assert"}; int idx; idx = (int)priority - (int)ANDROID_LOG_VERBOSE; if (idx < 0 || idx >= (int)(sizeof(priorityStrings) / sizeof(priorityStrings[0]))) if (idx < 0 || idx >= (int)(sizeof(priorityStrings) / sizeof(priorityStrings[0]))) return "?unknown?"; return priorityStrings[idx]; } Loading Loading @@ -351,8 +349,7 @@ static ssize_t fake_writev(int fd, const struct iovec* iov, int iovcnt) { * * Log format parsing taken from the long-dead utils/Log.cpp. */ static void showLog(LogState* state, int logPrio, const char* tag, const char* msg) { static void showLog(LogState* state, int logPrio, const char* tag, const char* msg) { #if !defined(_WIN32) struct tm tmBuf; #endif Loading Loading @@ -397,19 +394,16 @@ static void showLog(LogState* state, int logPrio, const char* tag, switch (state->outputFormat) { case FORMAT_TAG: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s: ", priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s: ", priChar, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_PROCESS: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d) ", priChar, pid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d) ", priChar, pid); suffixLen = snprintf(suffixBuf, sizeof(suffixBuf), " (%s)\n", tag); break; case FORMAT_THREAD: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d:%5d) ", priChar, pid, tid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c(%5d:%5d) ", priChar, pid, tid); strcpy(suffixBuf, "\n"); suffixLen = 1; break; Loading @@ -420,28 +414,24 @@ static void showLog(LogState* state, int logPrio, const char* tag, suffixLen = 1; break; case FORMAT_TIME: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %-8s\n\t", timeBuf, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %-8s\n\t", timeBuf, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_THREADTIME: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d %5d %c %-8s \n\t", timeBuf, pid, tid, priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d %5d %c %-8s \n\t", timeBuf, pid, tid, priChar, tag); strcpy(suffixBuf, "\n"); suffixLen = 1; break; case FORMAT_LONG: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "[ %s %5d:%5d %c/%-8s ]\n", timeBuf, pid, tid, priChar, tag); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "[ %s %5d:%5d %c/%-8s ]\n", timeBuf, pid, tid, priChar, tag); strcpy(suffixBuf, "\n\n"); suffixLen = 2; break; default: prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s(%5d): ", priChar, tag, pid); prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%c/%-8s(%5d): ", priChar, tag, pid); strcpy(suffixBuf, "\n"); suffixLen = 1; break; Loading Loading @@ -559,8 +549,7 @@ static void showLog(LogState* state, int logPrio, const char* tag, * tag (N bytes -- null-terminated ASCII string) * message (N bytes -- null-terminated ASCII string) */ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) { LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count) { LogState* state; /* Make sure that no-one frees the LogState while we're using it. Loading @@ -572,17 +561,24 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, state = fdToLogState(fd); if (state == NULL) { errno = EBADF; goto error; unlock(); return -1; } if (state->isBinary) { TRACE("%s: ignoring binary log\n", state->debugName); goto bail; unlock(); int len = 0; for (int i = 0; i < count; ++i) { len += vector[i].iov_len; } return len; } if (count != 3) { TRACE("%s: writevLog with count=%d not expected\n", state->debugName, count); goto error; unlock(); return -1; } /* pull out the three fields */ Loading @@ -598,7 +594,6 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, break; /* reached end of configured values */ if (strcmp(state->tagSet[i].tag, tag) == 0) { // TRACE("MATCH tag '%s'\n", tag); minPrio = state->tagSet[i].minPriority; break; } Loading @@ -606,21 +601,14 @@ LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, if (logPrio >= minPrio) { showLog(state, logPrio, tag, msg); } else { // TRACE("+++ NOLOG(%d): %s %s", logPrio, tag, msg); } bail: unlock(); int len = 0; for (i = 0; i < count; ++i) { len += vector[i].iov_len; } return len; error: unlock(); return -1; } /* Loading Loading @@ -663,22 +651,16 @@ LIBLOG_HIDDEN int fakeLogOpen(const char* pathName) { return fd; } LIBLOG_HIDDEN ssize_t __send_log_msg(char* buf __unused, size_t buf_size __unused) { LIBLOG_HIDDEN ssize_t __send_log_msg(char*, size_t) { return -ENODEV; } LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char* tag __unused, int def) { LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char*, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; } LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char* tag __unused, size_t len __unused, int def) { LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char*, size_t, int def) { int logLevel = def; return logLevel >= 0 && prio >= logLevel; } Loading
liblog/fake_log_device.h +9 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,18 @@ struct iovec; __BEGIN_DECLS LIBLOG_HIDDEN int fakeLogOpen(const char* pathName); LIBLOG_HIDDEN int fakeLogClose(int fd); LIBLOG_HIDDEN ssize_t fakeLogWritev(int fd, const struct iovec* vector, int count); LIBLOG_HIDDEN ssize_t __send_log_msg(char*, size_t); LIBLOG_ABI_PUBLIC int __android_log_is_loggable(int prio, const char*, int def); LIBLOG_ABI_PUBLIC int __android_log_is_loggable_len(int prio, const char*, size_t, int def); LIBLOG_ABI_PRIVATE int __android_log_is_debuggable(); __END_DECLS #endif // _LIBLOG_FAKE_LOG_DEVICE_H