Merge "logd: klogd and Mediatek part deux"

This commit is contained in:
Mark Salyzyn 2015-09-30 00:01:48 +00:00 committed by Gerrit Code Review
commit 8ec2d8fec6

View file

@ -388,6 +388,16 @@ static int convertKernelPrioToAndroidPrio(int pri) {
return ANDROID_LOG_INFO; return ANDROID_LOG_INFO;
} }
static const char *strnrchr(const char *s, size_t len, char c) {
const char *save = NULL;
for (;len; ++s, len--) {
if (*s == c) {
save = s;
}
}
return save;
}
// //
// log a message into the kernel log buffer // log a message into the kernel log buffer
// //
@ -584,11 +594,11 @@ int LogKlog::log(const char *buf) {
// eg: [143:healthd]healthd -> [143:healthd] // eg: [143:healthd]healthd -> [143:healthd]
size_t taglen = etag - tag; size_t taglen = etag - tag;
// Mediatek-special printk induced stutter // Mediatek-special printk induced stutter
char *np = strrchr(tag, ']'); const char *mp = strnrchr(tag, ']', taglen);
if (np && (++np < etag)) { if (mp && (++mp < etag)) {
size_t s = etag - np; size_t s = etag - mp;
if (((s + s) < taglen) && !strncmp(np, np - 1 - s, s)) { if (((s + s) < taglen) && !memcmp(mp, mp - 1 - s, s)) {
taglen = np - tag; taglen = mp - tag;
} }
} }
// skip leading space // skip leading space
@ -606,15 +616,19 @@ int LogKlog::log(const char *buf) {
b = 1; b = 1;
} }
size_t n = 1 + taglen + 1 + b + 1; size_t n = 1 + taglen + 1 + b + 1;
int rc = n;
if ((taglen > n) || (b > n)) { // Can not happen ...
rc = -EINVAL;
return rc;
}
// Allocate a buffer to hold the interpreted log message // Allocate a buffer to hold the interpreted log message
int rc = n;
char *newstr = reinterpret_cast<char *>(malloc(n)); char *newstr = reinterpret_cast<char *>(malloc(n));
if (!newstr) { if (!newstr) {
rc = -ENOMEM; rc = -ENOMEM;
return rc; return rc;
} }
np = newstr; char *np = newstr;
// Convert priority into single-byte Android logger priority // Convert priority into single-byte Android logger priority
*np = convertKernelPrioToAndroidPrio(pri); *np = convertKernelPrioToAndroidPrio(pri);