diff --git a/liblog/fake_log_device.c b/liblog/fake_log_device.c index a6d9a3488..4942c089a 100644 --- a/liblog/fake_log_device.c +++ b/liblog/fake_log_device.c @@ -69,7 +69,7 @@ typedef struct LogState { int fakeFd; /* a printable name for this fake device */ - char *debugName; + char debugName[sizeof("/dev/log/security")]; /* nonzero if this is a binary log */ int isBinary; @@ -123,8 +123,8 @@ static void unlock() * File descriptor management. */ #define FAKE_FD_BASE 10000 -#define MAX_OPEN_LOGS 16 -static LogState *openLogTable[MAX_OPEN_LOGS]; +#define MAX_OPEN_LOGS 8 +static LogState openLogTable[MAX_OPEN_LOGS]; /* * Allocate an fd and associate a new LogState with it. @@ -134,11 +134,10 @@ static LogState *createLogState() { size_t i; - for (i = 0; i < sizeof(openLogTable); i++) { - if (openLogTable[i] == NULL) { - openLogTable[i] = calloc(1, sizeof(LogState)); - openLogTable[i]->fakeFd = FAKE_FD_BASE + i; - return openLogTable[i]; + for (i = 0; i < (sizeof(openLogTable) / sizeof(openLogTable[0])); i++) { + if (openLogTable[i].fakeFd == 0) { + openLogTable[i].fakeFd = FAKE_FD_BASE + i; + return &openLogTable[i]; } } return NULL; @@ -150,7 +149,7 @@ static LogState *createLogState() static LogState *fdToLogState(int fd) { if (fd >= FAKE_FD_BASE && fd < FAKE_FD_BASE + MAX_OPEN_LOGS) { - return openLogTable[fd - FAKE_FD_BASE]; + return &openLogTable[fd - FAKE_FD_BASE]; } return NULL; } @@ -166,9 +165,7 @@ static void deleteFakeFd(int fd) ls = fdToLogState(fd); if (ls != NULL) { - openLogTable[fd - FAKE_FD_BASE] = NULL; - free(ls->debugName); - free(ls); + memset(&openLogTable[fd - FAKE_FD_BASE], 0, sizeof(openLogTable[0])); } unlock(); @@ -191,10 +188,12 @@ static void configureInitialState(const char* pathName, LogState* logState) { static const int kDevLogLen = sizeof("/dev/log/") - 1; - logState->debugName = strdup(pathName); + strncpy(logState->debugName, pathName, sizeof(logState->debugName)); + logState->debugName[sizeof(logState->debugName) - 1] = '\0'; /* identify binary logs */ - if (strcmp(pathName + kDevLogLen, "events") == 0) { + if (!strcmp(pathName + kDevLogLen, "events") || + !strcmp(pathName + kDevLogLen, "security")) { logState->isBinary = 1; } @@ -218,8 +217,7 @@ static void configureInitialState(const char* pathName, LogState* logState) i = 0; while (*tags != '\0' && !isspace(*tags) && *tags != ':' && - i < kMaxTagLen) - { + i < kMaxTagLen) { tagName[i++] = *tags++; } if (i == kMaxTagLen) { @@ -320,9 +318,9 @@ static const char* getPriorityString(int priority) }; int idx; - idx = (int) priority - (int) ANDROID_LOG_VERBOSE; + idx = (int)priority - (int)ANDROID_LOG_VERBOSE; if (idx < 0 || - idx >= (int) (sizeof(priorityStrings) / sizeof(priorityStrings[0]))) + idx >= (int)(sizeof(priorityStrings) / sizeof(priorityStrings[0]))) return "?unknown?"; return priorityStrings[idx]; } @@ -454,13 +452,15 @@ static void showLog(LogState *state, while (p < end) { if (*p++ == '\n') numLines++; } - if (p > msg && *(p-1) != '\n') numLines++; + if (p > msg && *(p-1) != '\n') { + numLines++; + } /* * Create an array of iovecs large enough to write all of * the lines with a prefix and a suffix. */ - const size_t INLINE_VECS = 6; + const size_t INLINE_VECS = 64; const size_t MAX_LINES = ((size_t)~0)/(3*sizeof(struct iovec*)); struct iovec stackVec[INLINE_VECS]; struct iovec* vec = stackVec; @@ -494,7 +494,9 @@ static void showLog(LogState *state, v++; } const char* start = p; - while (p < end && *p != '\n') p++; + while (p < end && *p != '\n') { + p++; + } if ((p-start) > 0) { v->iov_base = (void*)start; v->iov_len = p-start; diff --git a/liblog/logd_write.c b/liblog/logd_write.c index 494607359..b173d1a4e 100644 --- a/liblog/logd_write.c +++ b/liblog/logd_write.c @@ -125,7 +125,7 @@ static int __write_to_log_initialize() #if FAKE_LOG_DEVICE for (i = 0; i < LOG_ID_MAX; i++) { - char buf[sizeof("/dev/log_system")]; + char buf[sizeof("/dev/log_security")]; snprintf(buf, sizeof(buf), "/dev/log_%s", android_log_id_to_name(i)); log_fds[i] = fakeLogOpen(buf, O_WRONLY); }