]> git.saurik.com Git - apple/system_cmds.git/blobdiff - dmesg.tproj/dmesg.c
system_cmds-597.90.1.tar.gz
[apple/system_cmds.git] / dmesg.tproj / dmesg.c
index 373653dcebf45422d890323b43c5e670046b95b7..0315017db0c9f3709b743d0ca9c480cceff02b8d 100644 (file)
@@ -57,6 +57,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <vis.h>
+#include <sys/sysctl.h>
 #include <libproc.h>
 
 void
@@ -67,13 +68,24 @@ usage() {
 
 int
 main(int argc, char **argv) {
-       char msgbuf[16*1024], *visbuf;
+       char *msgbuf, *visbuf;
+       int msgbufsize;
+       size_t sysctlsize = sizeof(msgbufsize);
        long data_size;
 
        if (argc > 1)
                usage();
-       
-       if ((data_size = proc_kmsgbuf(msgbuf, sizeof(msgbuf))) == 0){
+
+       if (sysctlbyname("kern.msgbuf", &msgbufsize, &sysctlsize, NULL, 0)) {
+               perror("Unable to size kernel buffer");
+       }
+
+       msgbuf = malloc(msgbufsize);
+       if (msgbuf == NULL) {
+               perror("Unable to allocate a message buffer");
+       }
+
+       if ((data_size = proc_kmsgbuf(msgbuf, msgbufsize)) == 0){
                perror("Unable to obtain kernel buffer");
                usage();
        }
@@ -82,6 +94,7 @@ main(int argc, char **argv) {
        strvis(visbuf, msgbuf, 0);
        printf("%s", visbuf);
        free(visbuf);
+       free(msgbuf);
        exit(0);
 }