Home | History | Annotate | Download | only in toolbox
      1 #include <stdlib.h>
      2 #include <unistd.h>
      3 #include <stdio.h>
      4 #include <errno.h>
      5 #include <sys/klog.h>
      6 #include <string.h>
      7 
      8 #define KLOG_BUF_SHIFT	17	/* CONFIG_LOG_BUF_SHIFT from our kernel */
      9 #define KLOG_BUF_LEN	(1 << KLOG_BUF_SHIFT)
     10 
     11 int dmesg_main(int argc, char **argv)
     12 {
     13     char buffer[KLOG_BUF_LEN + 1];
     14     char *p = buffer;
     15     ssize_t ret;
     16     int n, op;
     17 
     18     if((argc == 2) && (!strcmp(argv[1],"-c"))) {
     19         op = KLOG_READ_CLEAR;
     20     } else {
     21         op = KLOG_READ_ALL;
     22     }
     23 
     24     n = klogctl(op, buffer, KLOG_BUF_LEN);
     25     if (n < 0) {
     26         perror("klogctl");
     27         return EXIT_FAILURE;
     28     }
     29     buffer[n] = '\0';
     30 
     31     while((ret = write(STDOUT_FILENO, p, n))) {
     32         if (ret == -1) {
     33 	    if (errno == EINTR)
     34                 continue;
     35 	    perror("write");
     36 	    return EXIT_FAILURE;
     37 	}
     38 	p += ret;
     39 	n -= ret;
     40     }
     41 
     42     return 0;
     43 }
     44