diff options
Diffstat (limited to 'logd')
-rw-r--r-- | logd/LogAudit.cpp | 5 | ||||
-rw-r--r-- | logd/LogKlog.cpp | 29 | ||||
-rw-r--r-- | logd/LogKlog.h | 2 | ||||
-rw-r--r-- | logd/tests/logd_test.cpp | 9 |
4 files changed, 36 insertions, 9 deletions
diff --git a/logd/LogAudit.cpp b/logd/LogAudit.cpp index 3811daaa0..c3ccd840a 100644 --- a/logd/LogAudit.cpp +++ b/logd/LogAudit.cpp @@ -25,6 +25,7 @@ #include <sys/uio.h> #include <syslog.h> +#include <android-base/macros.h> #include <private/android_filesystem_config.h> #include <private/android_logger.h> @@ -143,7 +144,7 @@ int LogAudit::logPrint(const char *fmt, ...) { iov[2].iov_len = strlen(newline); } - writev(fdDmesg, iov, sizeof(iov) / sizeof(iov[0])); + writev(fdDmesg, iov, arraysize(iov)); free(last_str); last_str = NULL; } @@ -165,7 +166,7 @@ int LogAudit::logPrint(const char *fmt, ...) { iov[2].iov_base = const_cast<char *>(newline); iov[2].iov_len = strlen(newline); - writev(fdDmesg, iov, sizeof(iov) / sizeof(iov[0])); + writev(fdDmesg, iov, arraysize(iov)); } } diff --git a/logd/LogKlog.cpp b/logd/LogKlog.cpp index fe0884600..707353562 100644 --- a/logd/LogKlog.cpp +++ b/logd/LogKlog.cpp @@ -402,7 +402,32 @@ void LogKlog::sniffTime(log_time &now, } } -pid_t LogKlog::sniffPid(const char *cp, size_t len) { +pid_t LogKlog::sniffPid(const char **buf, size_t len) { + const char *cp = *buf; + // HTC kernels with modified printk "c0 1648 " + if ((len > 9) && + (cp[0] == 'c') && + isdigit(cp[1]) && + (isdigit(cp[2]) || (cp[2] == ' ')) && + (cp[3] == ' ')) { + bool gotDigit = false; + int i; + for (i = 4; i < 9; ++i) { + if (isdigit(cp[i])) { + gotDigit = true; + } else if (gotDigit || (cp[i] != ' ')) { + break; + } + } + if ((i == 9) && (cp[i] == ' ')) { + int pid = 0; + char dummy; + if (sscanf(cp + 4, "%d%c", &pid, &dummy) == 2) { + *buf = cp + 10; // skip-it-all + return pid; + } + } + } while (len) { // Mediatek kernels with modified printk if (*cp == '[') { @@ -588,7 +613,7 @@ int LogKlog::log(const char *buf, size_t len) { } // Parse pid, tid and uid - const pid_t pid = sniffPid(p, len - (p - buf)); + const pid_t pid = sniffPid(&p, len - (p - buf)); const pid_t tid = pid; uid_t uid = AID_ROOT; if (pid) { diff --git a/logd/LogKlog.h b/logd/LogKlog.h index d81243688..11d88af18 100644 --- a/logd/LogKlog.h +++ b/logd/LogKlog.h @@ -51,7 +51,7 @@ public: protected: void sniffTime(log_time &now, const char **buf, size_t len, bool reverse); - pid_t sniffPid(const char *buf, size_t len); + pid_t sniffPid(const char **buf, size_t len); void calculateCorrection(const log_time &monotonic, const char *real_string, size_t len); virtual bool onDataAvailable(SocketClient *cli); diff --git a/logd/tests/logd_test.cpp b/logd/tests/logd_test.cpp index e0a4cc34b..254a3f849 100644 --- a/logd/tests/logd_test.cpp +++ b/logd/tests/logd_test.cpp @@ -23,6 +23,7 @@ #include <string> +#include <android-base/macros.h> #include <android-base/stringprintf.h> #include <cutils/sockets.h> #include <gtest/gtest.h> @@ -351,7 +352,7 @@ TEST(logd, both) { "/dev/log/system", "/dev/log_system", }; - for (unsigned int i = 0; i < (sizeof(loggers) / sizeof(loggers[0])); ++i) { + for (unsigned int i = 0; i < arraysize(loggers); ++i) { fd = open(loggers[i], O_RDONLY); if (fd < 0) { continue; @@ -434,12 +435,12 @@ TEST(logd, benchmark) { static const unsigned int log_latency = 4; static const unsigned int log_delay = 5; - unsigned long ns[sizeof(benchmarks) / sizeof(benchmarks[0])]; + unsigned long ns[arraysize(benchmarks)]; memset(ns, 0, sizeof(ns)); while (fgets(buffer, sizeof(buffer), fp)) { - for (unsigned i = 0; i < sizeof(ns) / sizeof(ns[0]); ++i) { + for (unsigned i = 0; i < arraysize(ns); ++i) { char *cp = strstr(buffer, benchmarks[i]); if (!cp) { continue; @@ -470,7 +471,7 @@ TEST(logd, benchmark) { EXPECT_GE(20000000UL, ns[log_delay]); // 10500289 user - for (unsigned i = 0; i < sizeof(ns) / sizeof(ns[0]); ++i) { + for (unsigned i = 0; i < arraysize(ns); ++i) { EXPECT_NE(0UL, ns[i]); } |