diff options
author | Geremy Condra <gcondra@google.com> | 2012-06-08 12:17:11 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-06-08 12:17:11 -0700 |
commit | ec8addcc8af1dc2a1ae606af8a16362bf5471a63 (patch) | |
tree | 7baad32412d6632ba99d9d800509227575905ce5 | |
parent | 7e5993bec7a2856f727c7029cb4e0b5b4a7436d4 (diff) | |
parent | 8b11c4cec21dc8eedd153866ce738614cfae57e6 (diff) | |
download | bionic-ec8addcc8af1dc2a1ae606af8a16362bf5471a63.zip bionic-ec8addcc8af1dc2a1ae606af8a16362bf5471a63.tar.gz bionic-ec8addcc8af1dc2a1ae606af8a16362bf5471a63.tar.bz2 |
Merge "Adding event logging to libc."
-rw-r--r-- | libc/bionic/logd_write.c | 42 | ||||
-rw-r--r-- | libc/private/logd.h | 3 |
2 files changed, 44 insertions, 1 deletions
diff --git a/libc/bionic/logd_write.c b/libc/bionic/logd_write.c index 2bc39fa..ac71689 100644 --- a/libc/bionic/logd_write.c +++ b/libc/bionic/logd_write.c @@ -64,6 +64,7 @@ typedef enum { LOG_ID_NONE = 0, LOG_ID_MAIN, LOG_ID_RADIO, + LOG_ID_EVENTS, LOG_ID_MAX } log_id_t; @@ -84,7 +85,8 @@ static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER; static log_channel_t log_channels[LOG_ID_MAX] = { { __write_to_log_null, -1, NULL }, { __write_to_log_init, -1, "/dev/"LOGGER_LOG_MAIN }, - { __write_to_log_init, -1, "/dev/"LOGGER_LOG_RADIO } + { __write_to_log_init, -1, "/dev/"LOGGER_LOG_RADIO }, + { __write_to_log_init, -1, "/dev/"LOGGER_LOG_EVENTS } }; /* Important: see technical note at start of source file */ @@ -207,3 +209,41 @@ int __libc_android_log_assert(const char *cond, const char *tag, return -1; } + +/* + * Event logging. + */ + +// must be kept in sync with frameworks/base/core/java/android/util/EventLog.java +typedef enum { + EVENT_TYPE_INT = 0, + EVENT_TYPE_LONG = 1, + EVENT_TYPE_STRING = 2, + EVENT_TYPE_LIST = 3, +} AndroidEventLogType; + +static int __libc_android_log_btwrite(int32_t tag, char type, const void *payload, size_t len) +{ + struct iovec vec[3]; + + vec[0].iov_base = &tag; + vec[0].iov_len = sizeof(tag); + vec[1].iov_base = &type; + vec[1].iov_len = sizeof(type); + vec[2].iov_base = (void*)payload; + vec[2].iov_len = len; + + return log_channels[LOG_ID_EVENTS].logger(LOG_ID_EVENTS, vec); +} + +__LIBC_HIDDEN__ +void __libc_android_log_event_int(int32_t tag, int value) +{ + __libc_android_log_btwrite(tag, EVENT_TYPE_INT, &value, sizeof(value)); +} + +__LIBC_HIDDEN__ +void __libc_android_log_event_uid(int32_t tag) +{ + __libc_android_log_event_int(tag, getuid()); +} diff --git a/libc/private/logd.h b/libc/private/logd.h index 4a9b62e..37d4104 100644 --- a/libc/private/logd.h +++ b/libc/private/logd.h @@ -48,4 +48,7 @@ int __libc_android_log_write(int prio, const char* tag, const char* buffer); int __libc_android_log_print(int prio, const char *tag, const char *fmt, ...); int __libc_android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap); +void __libc_android_log_event_int(int32_t tag, int value); +void __libc_android_log_event_uid(int32_t tag); + #endif /* _ANDROID_BIONIC_LOGD_H */ |