/* See LICENSE file for copyright and license details. */ #include #include #include #include #include #include "grabmntinfo.h" #include "util.h" static int dmesg_show(int fd, const void *buf, size_t n); enum { SYSLOG_ACTION_READ_ALL = 3, SYSLOG_ACTION_SIZE_BUFFER = 10 }; static void usage(void) { eprintf("usage: %s\n", argv0); } int main(int argc, char *argv[]) { int n; char *buf; ARGBEGIN { default: usage(); } ARGEND; n = klogctl(SYSLOG_ACTION_SIZE_BUFFER, NULL, 0); if (n < 0) eprintf("klogctl:"); buf = malloc(n); if (!buf) eprintf("malloc:"); n = klogctl(SYSLOG_ACTION_READ_ALL, buf, n); if (n < 0) eprintf("klogctl:"); n = dmesg_show(STDOUT_FILENO, buf, n); if (n < 0) eprintf("dmesg_show:"); free(buf); return 0; } int dmesg_show(int fd, const void *buf, size_t n) { int last = '\n'; char newbuf[n], *q = newbuf; const char *p = buf; size_t i; memset(newbuf, 0, n); for (i = 0; i < n; ) { if (last == '\n' && p[i] == '<') { i += 2; if (i + 1 < n && p[i + 1] == '>') i++; } else { *q++ = p[i]; } last = p[i++]; } if (write(fd, newbuf, n) != n) return -1; if (last != '\n') if (write(fd, "\n", 1) != 1) return -1; return 0; }