diff options
author | Mark Salyzyn <salyzyn@google.com> | 2015-07-13 10:19:34 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2015-08-27 10:12:49 -0700 |
commit | cb19b08dac6c486f64e0577bc4c0fd92e0ea4552 (patch) | |
tree | 33d1ea86a3ef527786bcb8f377e49f574de89227 | |
parent | 8bc53c125ab739db7bd34bd3b5c496c3f3a542f9 (diff) | |
download | system_core-cb19b08dac6c486f64e0577bc4c0fd92e0ea4552.zip system_core-cb19b08dac6c486f64e0577bc4c0fd92e0ea4552.tar.gz system_core-cb19b08dac6c486f64e0577bc4c0fd92e0ea4552.tar.bz2 |
logd: refine is_prio
(cherry pick from commit 618d0dec5037df0fad1ce5cc90da2b7fc2c88b0c)
- Heuristics associated with translation of kernel messages to
Android user space logs.
- Limit is_prio to 4 characters, we got false positives on hex
values like <register contents> with no alpha chars.
- x11 and other register definitions are not valid tags, en0 is
- fix some Android coding standard issues
Change-Id: Idc3dcc53a2cb75ac38628c8ef7a5d5b53f12587a
-rw-r--r-- | logd/LogKlog.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/logd/LogKlog.cpp b/logd/LogKlog.cpp index d578c04..d3a73a1 100644 --- a/logd/LogKlog.cpp +++ b/logd/LogKlog.cpp @@ -43,8 +43,10 @@ static char *is_prio(char *s) { if (!isdigit(*s++)) { return NULL; } + static const size_t max_prio_len = 4; + size_t len = 0; char c; - while ((c = *s++)) { + while (((c = *s++)) && (++len <= max_prio_len)) { if (!isdigit(c)) { return (c == '>') ? s : NULL; } @@ -73,7 +75,7 @@ static char *is_timestamp(char *s) { } // Like strtok_r with "\r\n" except that we look for log signatures (regex) -// \(\(<[0-9]+>\)\([[] *[0-9]+[.][0-9]+[]] \)\{0,1\}\|[[] *[0-9]+[.][0-9]+[]] \) +// \(\(<[0-9]\{1,4\}>\)\([[] *[0-9]+[.][0-9]+[]] \)\{0,1\}\|[[] *[0-9]+[.][0-9]+[]] \) // and split if we see a second one without a newline. #define SIGNATURE_MASK 0xF0 @@ -165,7 +167,7 @@ char *log_strtok_r(char *s, char **last) { break; } } - /* NOTREACHED */ + // NOTREACHED } log_time LogKlog::correction = log_time(CLOCK_REALTIME) - log_time(CLOCK_MONOTONIC); @@ -465,7 +467,7 @@ int LogKlog::log(const char *buf) { if (strncmp(bt, cp, size)) { // <PRI>[<TIME>] <tag>_host '<tag>.<num>' : message if (!strncmp(bt + size - 5, "_host", 5) - && !strncmp(bt, cp, size - 5)) { + && !strncmp(bt, cp, size - 5)) { const char *b = cp; cp += size - 5; if (*cp == '.') { @@ -535,11 +537,15 @@ int LogKlog::log(const char *buf) { } size = etag - tag; if ((size <= 1) - || ((size == 2) && (isdigit(tag[0]) || isdigit(tag[1]))) - || ((size == 3) && !strncmp(tag, "CPU", 3)) - || ((size == 7) && !strncmp(tag, "WARNING", 7)) - || ((size == 5) && !strncmp(tag, "ERROR", 5)) - || ((size == 4) && !strncmp(tag, "INFO", 4))) { + // register names like x9 + || ((size == 2) && (isdigit(tag[0]) || isdigit(tag[1]))) + // register names like x18 but not driver names like en0 + || ((size == 3) && (isdigit(tag[1]) && isdigit(tag[2]))) + // blacklist + || ((size == 3) && !strncmp(tag, "CPU", 3)) + || ((size == 7) && !strncmp(tag, "WARNING", 7)) + || ((size == 5) && !strncmp(tag, "ERROR", 5)) + || ((size == 4) && !strncmp(tag, "INFO", 4))) { buf = start; etag = tag = ""; } |