diff options
author | A. Cody Schuffelen <schuffelen@google.com> | 2020-03-16 19:32:45 -0700 |
---|---|---|
committer | A. Cody Schuffelen <schuffelen@google.com> | 2020-03-16 19:32:45 -0700 |
commit | 1365217e0129aa876e3d55789a3776183d478fbf (patch) | |
tree | ce4eb92cce3f69b9e832f7f03df10eaa12fc271b | |
parent | 71ec5a63725e9aeb83b4e599ea91b5c1b83796f9 (diff) | |
download | tpm2-tss-1365217e0129aa876e3d55789a3776183d478fbf.tar.gz |
ANDROID: hook tpm2-tss into the android logging systemandroid-r-preview-4android-r-preview-3android-r-preview-2
Bug: 148102516
Test: Build other code using this
Change-Id: I224ceb5c23be25b51766eef2b5a01d8d92657caa
-rw-r--r-- | Android.bp | 4 | ||||
-rw-r--r-- | src/util/log.cpp (renamed from src/util/log.c) | 48 | ||||
-rw-r--r-- | src/util/log.h | 8 |
3 files changed, 54 insertions, 6 deletions
@@ -92,12 +92,16 @@ cc_library { defaults: [ "tpm2-tss-defaults" ], srcs: [ "src/util/*.c", + "src/util/*.cpp", ], local_include_dirs: [ "include/tss2", "src", "src/util", ], + shared_libs: [ + "libbase", + ], } cc_library { diff --git a/src/util/log.c b/src/util/log.cpp index c28bc695..8ab9405d 100644 --- a/src/util/log.c +++ b/src/util/log.cpp @@ -11,6 +11,8 @@ #define LOGMODULE log #include "log.h" +#include <android-base/logging.h> + #if !defined(_MSC_VER) || defined(__INTEL_COMPILER) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) @@ -20,6 +22,8 @@ #define unlikely(x) (x) #endif +extern "C" { + /** * Compares two strings byte by byte and ignores the * character's case. Stops at the n-th byte of both @@ -159,25 +163,55 @@ doLog(log_level loglevel, const char *module, log_level logdefault, if (loglevel > *status) return; - int size = snprintf(NULL, 0, "%s:%s:%s:%d:%s() %s \n", + int size = snprintf(NULL, 0, "%s:%s:%s:%d:%s() %s ", log_strings[loglevel], module, file, line, func, msg); char fmt[size+1]; - snprintf(fmt, sizeof(fmt), "%s:%s:%s:%d:%s() %s \n", + snprintf(fmt, sizeof(fmt), "%s:%s:%s:%d:%s() %s ", log_strings[loglevel], module, file, line, func, msg); va_list vaargs; va_start(vaargs, msg); - vfprintf (stderr, fmt, - /* log_strings[loglevel], module, file, func, line, */ - vaargs); + int complete_size = vsnprintf(NULL, 0, fmt, vaargs); + va_end(vaargs); + + va_start(vaargs, msg); + char complete[complete_size+1]; + vsnprintf(complete, sizeof(complete), fmt, vaargs); va_end(vaargs); + + fprintf(stderr, "%s\n", complete); + + switch (loglevel) { + case LOGLEVEL_NONE: + LOG(ERROR) << complete; + break; + case LOGLEVEL_ERROR: + LOG(ERROR) << complete; + break; + case LOGLEVEL_WARNING: + LOG(WARNING) << complete; + break; + case LOGLEVEL_INFO: + LOG(INFO) << complete; + break; + case LOGLEVEL_DEBUG: + LOG(DEBUG) << complete; + break; + case LOGLEVEL_TRACE: + LOG(VERBOSE) << complete; + break; + case LOGLEVEL_UNDEFINED: + default: + LOG(WARNING) << complete; + break; + } } static log_level log_stringlevel(const char *n) { log_level i; - for(i = 0; i < sizeof(log_strings)/sizeof(log_strings[0]); i++) { + for(i = (log_level) 0; i < sizeof(log_strings)/sizeof(log_strings[0]); i = (log_level) ((int) i + 1)) { if (case_insensitive_strncmp(log_strings[i], n, strlen(log_strings[i])) == 0) { return i; } @@ -206,3 +240,5 @@ getLogLevel(const char *module, log_level logdefault) } return loglevel; } + +} // extern "C" diff --git a/src/util/log.h b/src/util/log.h index 01010a60..09b6d5ae 100644 --- a/src/util/log.h +++ b/src/util/log.h @@ -151,6 +151,10 @@ static log_level LOGMODULE_status COMPILER_ATTR(unused) = LOGLEVEL_UNDEFINED; #define LOGBLOB_TRACE(FORMAT, ...) {} #endif +#ifdef __cplusplus +extern "C" { +#endif + void doLog(log_level loglevel, const char *module, log_level logdefault, log_level *status, @@ -165,4 +169,8 @@ doLogBlob(log_level loglevel, const char *module, log_level logdefault, const uint8_t *buffer, size_t size, const char *msg, ...) COMPILER_ATTR(unused, format (printf, 10, 11)); +#ifdef __cplusplus +} // extern "C" +#endif + #endif /* LOG_H */ |