Merge "Make android_logger_set_prune_list() sane" am: 9a03dfedac
am: bbfa69f0d8
Change-Id: I3f9895e78bafe82c60438b518efa66b5c9aaac1c
diff --git a/liblog/include/log/log_read.h b/liblog/include/log/log_read.h
index 6601072..18c1c33 100644
--- a/liblog/include/log/log_read.h
+++ b/liblog/include/log/log_read.h
@@ -139,8 +139,7 @@
char* buf, size_t len);
ssize_t android_logger_get_prune_list(struct logger_list* logger_list,
char* buf, size_t len);
-int android_logger_set_prune_list(struct logger_list* logger_list, char* buf,
- size_t len);
+int android_logger_set_prune_list(struct logger_list* logger_list, const char* buf, size_t len);
#define ANDROID_LOG_RDONLY O_RDONLY
#define ANDROID_LOG_WRONLY O_WRONLY
diff --git a/liblog/logd_reader.cpp b/liblog/logd_reader.cpp
index 96e7a61..6865c14 100644
--- a/liblog/logd_reader.cpp
+++ b/liblog/logd_reader.cpp
@@ -33,6 +33,8 @@
#include <time.h>
#include <unistd.h>
+#include <string>
+
#include <cutils/sockets.h>
#include <private/android_filesystem_config.h>
#include <private/android_logger.h>
@@ -249,22 +251,14 @@
return SendLogdControlMessage(buf, len);
}
-int android_logger_set_prune_list(struct logger_list* logger_list, char* buf, size_t len) {
+int android_logger_set_prune_list(struct logger_list* logger_list, const char* buf, size_t len) {
if (logger_list->mode & ANDROID_LOG_PSTORE) {
return -EINVAL;
}
- const char cmd[] = "setPruneList ";
- const size_t cmdlen = sizeof(cmd) - 1;
+ std::string cmd = "setPruneList " + std::string{buf, len};
- if (strlen(buf) > (len - cmdlen)) {
- return -ENOMEM; /* KISS */
- }
- memmove(buf + cmdlen, buf, len - cmdlen);
- buf[len - 1] = '\0';
- memcpy(buf, cmd, cmdlen);
-
- return check_log_success(buf, SendLogdControlMessage(buf, len));
+ return check_log_success(cmd.data(), SendLogdControlMessage(cmd.data(), cmd.size()));
}
static int logdOpen(struct logger_list* logger_list) {
diff --git a/logcat/logcat.cpp b/logcat/logcat.cpp
index 831b4e3..cd5d7d4 100644
--- a/logcat/logcat.cpp
+++ b/logcat/logcat.cpp
@@ -1075,17 +1075,8 @@
if (setPruneList) {
size_t len = strlen(setPruneList);
- // extra 32 bytes are needed by android_logger_set_prune_list
- size_t bLen = len + 32;
- char* buf = nullptr;
- if (asprintf(&buf, "%-*s", (int)(bLen - 1), setPruneList) > 0) {
- buf[len] = '\0';
- if (android_logger_set_prune_list(logger_list.get(), buf, bLen)) {
- error(EXIT_FAILURE, 0, "Failed to set the prune list.");
- }
- free(buf);
- } else {
- error(EXIT_FAILURE, 0, "Failed to set the prune list (alloc).");
+ if (android_logger_set_prune_list(logger_list.get(), setPruneList, len)) {
+ error(EXIT_FAILURE, 0, "Failed to set the prune list.");
}
return EXIT_SUCCESS;
}