diff options
| author | Felix Janda <felix.janda@posteo.de> | 2013-08-10 19:35:11 +0200 | 
|---|---|---|
| committer | Felix Janda <felix.janda@posteo.de> | 2013-08-10 19:35:11 +0200 | 
| commit | 35104f47f9d36a9afb43de8c863137fe76c9ff3f (patch) | |
| tree | f25b0740356aff4248dc2721eeec6757b608b4a3 | |
| parent | 5ebaea605a26775186a493ed6bb401c6de7226ec (diff) | |
| download | toybox-35104f47f9d36a9afb43de8c863137fe76c9ff3f.tar.gz | |
Cleanup klogd
Remove #if and inline most functions
| -rw-r--r-- | toys/pending/klogd.c | 104 | 
1 files changed, 39 insertions, 65 deletions
| diff --git a/toys/pending/klogd.c b/toys/pending/klogd.c index c44022a2..0b638294 100644 --- a/toys/pending/klogd.c +++ b/toys/pending/klogd.c @@ -24,87 +24,38 @@ config KLOGD_SOURCE_RING_BUFFER  #define FOR_klogd  #include "toys.h"  #include <signal.h> +#include <sys/klog.h>  GLOBALS(    long level; +    int fd;  ) -#if CFG_KLOGD_SOURCE_RING_BUFFER     -#include <sys/klog.h> -static void open_klogd(void)   -{ -  syslog(LOG_NOTICE, "KLOGD: started with Kernel ring buffer as log source\n"); -  klogctl(1, NULL, 0); -} - -static int read_klogd(char *bufptr, int len) -{ -  return klogctl(2, bufptr, len); -} -  static void set_log_level(int level)  {    -  klogctl(8, NULL, level); -} - -static void close_klogd(void) -{ -  klogctl(7, NULL, 0);  -  klogctl(0, NULL, 0); -} -#else -static void open_klogd(void) -{ -  TT.fd = xopen("/proc/kmsg", O_RDONLY); //_PATH_KLOG in paths.h -  syslog(LOG_NOTICE, "KLOGD: started with /proc/kmsg as log source\n"); -} - -static int read_klogd(char *bufptr, int len) -{ -  return xread(TT.fd, bufptr, len); -} - -static void set_log_level(int level) -{ +  if (CFG_KLOGD_SOURCE_RING_BUFFER) +    klogctl(8, NULL, level); +  else {      FILE *fptr = xfopen("/proc/sys/kernel/printk", "w");      fprintf(fptr, "%u\n", level);      fclose(fptr);      fptr = NULL; +  }  } -static void close_klogd(void) -{ -  set_log_level(7); -  xclose(TT.fd); -} -#endif -  static void handle_signal(int sig)  { -  close_klogd(); +  if (CFG_KLOGD_SOURCE_RING_BUFFER) { +    klogctl(7, NULL, 0);  +    klogctl(0, NULL, 0); +  } else { +    set_log_level(7); +    xclose(TT.fd); +  }    syslog(LOG_NOTICE,"KLOGD: Daemon exiting......");    exit(1);  } -static int daemonize(void) -{         -  pid_t pid;         -  int fd = open("/dev/null", O_RDWR); -  if (fd < 0) fd = open("/", O_RDONLY, 0666); -  if((pid = fork()) < 0) {  -    perror_msg("DAEMON: fail to fork"); -    return -1;    -  }               -  if (pid) exit(EXIT_SUCCESS); - -  setsid();       -  dup2(fd, 0);    -  dup2(fd, 1);    -  dup2(fd, 2);    -  if (fd > 2) close(fd);    -  return 0;       -} -  /*   * Read kernel ring buffer in local buff and keep track of   * "used" amount to track next read to start. @@ -116,13 +67,36 @@ void klogd_main(void)    sigatexit(handle_signal);    if (toys.optflags & FLAG_c) set_log_level(TT.level);    //set log level -  if (!(toys.optflags & FLAG_n)) daemonize();        //Make it daemon -  open_klogd();     +  if (!(toys.optflags & FLAG_n)) {                       //Make it daemon +    pid_t pid;         +    int fd = open("/dev/null", O_RDWR); +    if (fd < 0) fd = open("/", O_RDONLY, 0666); +    if((pid = fork()) < 0) perror_exit("DAEMON: fail to fork"); +    if (pid) exit(EXIT_SUCCESS); + +    setsid();       +    dup2(fd, 0);    +    dup2(fd, 1);    +    dup2(fd, 2);    +    if (fd > 2) close(fd);    +  } + +  if (CFG_KLOGD_SOURCE_RING_BUFFER) { +    syslog(LOG_NOTICE, "KLOGD: started with Kernel ring buffer as log source\n"); +    klogctl(1, NULL, 0); +  } else { +    TT.fd = xopen("/proc/kmsg", O_RDONLY); //_PATH_KLOG in paths.h +    syslog(LOG_NOTICE, "KLOGD: started with /proc/kmsg as log source\n"); +  }    openlog("Kernel", 0, LOG_KERN);    //open connection to system logger..    while(1) {      start = msg_buffer + used; //start updated for re-read. -    size = read_klogd(start, sizeof(msg_buffer) - used - 1); +    if (CFG_KLOGD_SOURCE_RING_BUFFER) { +      size = klogctl(2, start, sizeof(msg_buffer) - used - 1); +    } else { +      size = xread(TT.fd, start, sizeof(msg_buffer) - used - 1); +    }      if (size < 0) perror_exit("error reading file:");      start[size] = '\0';  //Ensure last line to be NUL terminated.      if (used) start = msg_buffer; | 
