summaryrefslogtreecommitdiffstats
path: root/toolbox
diff options
context:
space:
mode:
authorJames Sullins <jcsullins@gmail.com>2012-06-24 07:07:42 -0500
committerChirayu Desai <cdesai@cyanogenmod.org>2013-04-01 21:50:03 +0530
commitedee93dc5ba2dd1fd7b1e097a29cb40d1d8fe516 (patch)
tree2c1c9a0253bb62de8229d1d89b990139777add1c /toolbox
parentf5562cb66c1c15d65bc372ede4c180430e1ce9d7 (diff)
downloadsystem_core-edee93dc5ba2dd1fd7b1e097a29cb40d1d8fe516.tar.gz
system_core-edee93dc5ba2dd1fd7b1e097a29cb40d1d8fe516.tar.bz2
system_core-edee93dc5ba2dd1fd7b1e097a29cb40d1d8fe516.zip
toolbox/dmesg: do not hardcode KLOG_BUF_LEN
Change-Id: Ia99654a53d6adfeba5a5088b7cff45c6e47b6188
Diffstat (limited to 'toolbox')
-rw-r--r--toolbox/dmesg.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/toolbox/dmesg.c b/toolbox/dmesg.c
index e57f6077f..9c73b00ca 100644
--- a/toolbox/dmesg.c
+++ b/toolbox/dmesg.c
@@ -5,15 +5,30 @@
#include <sys/klog.h>
#include <string.h>
-#define KLOG_BUF_SHIFT 17 /* CONFIG_LOG_BUF_SHIFT from our kernel */
-#define KLOG_BUF_LEN (1 << KLOG_BUF_SHIFT)
+#define FALLBACK_KLOG_BUF_SHIFT 17 /* CONFIG_LOG_BUF_SHIFT from our kernel */
+#define FALLBACK_KLOG_BUF_LEN (1 << FALLBACK_KLOG_BUF_SHIFT)
int dmesg_main(int argc, char **argv)
{
- char buffer[KLOG_BUF_LEN + 1];
- char *p = buffer;
+ char *buffer;
+ char *p;
ssize_t ret;
- int n, op;
+ int n, op, klog_buf_len;
+
+ klog_buf_len = klogctl(KLOG_SIZE_BUFFER, 0, 0);
+
+ if (klog_buf_len <= 0) {
+ klog_buf_len = FALLBACK_KLOG_BUF_LEN;
+ }
+
+ buffer = (char *)malloc(klog_buf_len + 1);
+
+ if (!buffer) {
+ perror("malloc");
+ return EXIT_FAILURE;
+ }
+
+ p = buffer;
if((argc == 2) && (!strcmp(argv[1],"-c"))) {
op = KLOG_READ_CLEAR;
@@ -21,7 +36,7 @@ int dmesg_main(int argc, char **argv)
op = KLOG_READ_ALL;
}
- n = klogctl(op, buffer, KLOG_BUF_LEN);
+ n = klogctl(op, buffer, klog_buf_len);
if (n < 0) {
perror("klogctl");
return EXIT_FAILURE;