Loading liblog/logprint.c +2 −2 Original line number Diff line number Diff line Loading @@ -1488,7 +1488,7 @@ char *android_log_formatLogLine ( strcat(p, suffixBuf); p += suffixLen; } else { while(pm < (entry->message + entry->messageLen)) { do { const char *lineStart; size_t lineLen; lineStart = pm; Loading @@ -1510,7 +1510,7 @@ char *android_log_formatLogLine ( p += suffixLen; if (*pm == '\n') pm++; } } while (pm < (entry->message + entry->messageLen)); } if (p_outLength != NULL) { Loading liblog/tests/liblog_test.cpp +127 −5 Original line number Diff line number Diff line Loading @@ -165,6 +165,133 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) { android_logger_list_close(logger_list); } static inline int32_t get4LE(const char* src) { return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24); } TEST(liblog, __android_log_bswrite) { struct logger_list *logger_list; pid_t pid = getpid(); ASSERT_TRUE(NULL != (logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid))); static const char buffer[] = "Hello World"; log_time ts(android_log_clockid()); ASSERT_LT(0, __android_log_bswrite(0, buffer)); usleep(1000000); int count = 0; for (;;) { log_msg log_msg; if (android_logger_list_read(logger_list, &log_msg) <= 0) { break; } ASSERT_EQ(log_msg.entry.pid, pid); if ((log_msg.entry.sec < (ts.tv_sec - 1)) || ((ts.tv_sec + 1) < log_msg.entry.sec) || (log_msg.entry.len != (4 + 1 + 4 + sizeof(buffer) - 1)) || (log_msg.id() != LOG_ID_EVENTS)) { continue; } char *eventData = log_msg.msg(); if (eventData[4] != EVENT_TYPE_STRING) { continue; } int len = get4LE(eventData + 4 + 1); if (len == (sizeof(buffer) - 1)) { ++count; AndroidLogFormat *logformat = android_log_format_new(); EXPECT_TRUE(NULL != logformat); AndroidLogEntry entry; char msgBuf[1024]; EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1, &entry, NULL, msgBuf, sizeof(msgBuf))); fflush(stderr); EXPECT_EQ(31, android_log_printLogLine(logformat, fileno(stderr), &entry)); android_log_format_free(logformat); } } EXPECT_EQ(1, count); android_logger_list_close(logger_list); } TEST(liblog, __android_log_bswrite__empty_string) { struct logger_list *logger_list; pid_t pid = getpid(); ASSERT_TRUE(NULL != (logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid))); static const char buffer[] = ""; log_time ts(android_log_clockid()); ASSERT_LT(0, __android_log_bswrite(0, buffer)); usleep(1000000); int count = 0; for (;;) { log_msg log_msg; if (android_logger_list_read(logger_list, &log_msg) <= 0) { break; } ASSERT_EQ(log_msg.entry.pid, pid); if ((log_msg.entry.sec < (ts.tv_sec - 1)) || ((ts.tv_sec + 1) < log_msg.entry.sec) || (log_msg.entry.len != (4 + 1 + 4)) || (log_msg.id() != LOG_ID_EVENTS)) { continue; } char *eventData = log_msg.msg(); if (eventData[4] != EVENT_TYPE_STRING) { continue; } int len = get4LE(eventData + 4 + 1); if (len == 0) { ++count; AndroidLogFormat *logformat = android_log_format_new(); EXPECT_TRUE(NULL != logformat); AndroidLogEntry entry; char msgBuf[1024]; EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1, &entry, NULL, msgBuf, sizeof(msgBuf))); fflush(stderr); EXPECT_EQ(20, android_log_printLogLine(logformat, fileno(stderr), &entry)); android_log_format_free(logformat); } } EXPECT_EQ(1, count); android_logger_list_close(logger_list); } TEST(liblog, __security) { static const char persist_key[] = "persist.logd.security"; static const char readonly_key[] = "ro.device_owner"; Loading Loading @@ -1106,11 +1233,6 @@ TEST(liblog, is_loggable) { property_set(key + base_offset, hold[3]); } static inline int32_t get4LE(const char* src) { return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24); } TEST(liblog, android_errorWriteWithInfoLog__android_logger_list_read__typical) { const int TAG = 123456781; const char SUBTAG[] = "test-subtag"; Loading Loading
liblog/logprint.c +2 −2 Original line number Diff line number Diff line Loading @@ -1488,7 +1488,7 @@ char *android_log_formatLogLine ( strcat(p, suffixBuf); p += suffixLen; } else { while(pm < (entry->message + entry->messageLen)) { do { const char *lineStart; size_t lineLen; lineStart = pm; Loading @@ -1510,7 +1510,7 @@ char *android_log_formatLogLine ( p += suffixLen; if (*pm == '\n') pm++; } } while (pm < (entry->message + entry->messageLen)); } if (p_outLength != NULL) { Loading
liblog/tests/liblog_test.cpp +127 −5 Original line number Diff line number Diff line Loading @@ -165,6 +165,133 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) { android_logger_list_close(logger_list); } static inline int32_t get4LE(const char* src) { return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24); } TEST(liblog, __android_log_bswrite) { struct logger_list *logger_list; pid_t pid = getpid(); ASSERT_TRUE(NULL != (logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid))); static const char buffer[] = "Hello World"; log_time ts(android_log_clockid()); ASSERT_LT(0, __android_log_bswrite(0, buffer)); usleep(1000000); int count = 0; for (;;) { log_msg log_msg; if (android_logger_list_read(logger_list, &log_msg) <= 0) { break; } ASSERT_EQ(log_msg.entry.pid, pid); if ((log_msg.entry.sec < (ts.tv_sec - 1)) || ((ts.tv_sec + 1) < log_msg.entry.sec) || (log_msg.entry.len != (4 + 1 + 4 + sizeof(buffer) - 1)) || (log_msg.id() != LOG_ID_EVENTS)) { continue; } char *eventData = log_msg.msg(); if (eventData[4] != EVENT_TYPE_STRING) { continue; } int len = get4LE(eventData + 4 + 1); if (len == (sizeof(buffer) - 1)) { ++count; AndroidLogFormat *logformat = android_log_format_new(); EXPECT_TRUE(NULL != logformat); AndroidLogEntry entry; char msgBuf[1024]; EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1, &entry, NULL, msgBuf, sizeof(msgBuf))); fflush(stderr); EXPECT_EQ(31, android_log_printLogLine(logformat, fileno(stderr), &entry)); android_log_format_free(logformat); } } EXPECT_EQ(1, count); android_logger_list_close(logger_list); } TEST(liblog, __android_log_bswrite__empty_string) { struct logger_list *logger_list; pid_t pid = getpid(); ASSERT_TRUE(NULL != (logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid))); static const char buffer[] = ""; log_time ts(android_log_clockid()); ASSERT_LT(0, __android_log_bswrite(0, buffer)); usleep(1000000); int count = 0; for (;;) { log_msg log_msg; if (android_logger_list_read(logger_list, &log_msg) <= 0) { break; } ASSERT_EQ(log_msg.entry.pid, pid); if ((log_msg.entry.sec < (ts.tv_sec - 1)) || ((ts.tv_sec + 1) < log_msg.entry.sec) || (log_msg.entry.len != (4 + 1 + 4)) || (log_msg.id() != LOG_ID_EVENTS)) { continue; } char *eventData = log_msg.msg(); if (eventData[4] != EVENT_TYPE_STRING) { continue; } int len = get4LE(eventData + 4 + 1); if (len == 0) { ++count; AndroidLogFormat *logformat = android_log_format_new(); EXPECT_TRUE(NULL != logformat); AndroidLogEntry entry; char msgBuf[1024]; EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1, &entry, NULL, msgBuf, sizeof(msgBuf))); fflush(stderr); EXPECT_EQ(20, android_log_printLogLine(logformat, fileno(stderr), &entry)); android_log_format_free(logformat); } } EXPECT_EQ(1, count); android_logger_list_close(logger_list); } TEST(liblog, __security) { static const char persist_key[] = "persist.logd.security"; static const char readonly_key[] = "ro.device_owner"; Loading Loading @@ -1106,11 +1233,6 @@ TEST(liblog, is_loggable) { property_set(key + base_offset, hold[3]); } static inline int32_t get4LE(const char* src) { return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24); } TEST(liblog, android_errorWriteWithInfoLog__android_logger_list_read__typical) { const int TAG = 123456781; const char SUBTAG[] = "test-subtag"; Loading