X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Flog.c;h=cad127f47bb241a1ab7fb2c850ff046c24879226;hb=0d56b467cc2184f00a4e390f95596704d819dfa3;hp=e1fc2bed185afc946bca9cdfe03ec6f27fa96df4;hpb=7f6f029467c9b9ead1074a82b8001ba7e69783b7;p=libucw.git diff --git a/lib/log.c b/lib/log.c index e1fc2bed..cad127f4 100644 --- a/lib/log.c +++ b/lib/log.c @@ -1,7 +1,7 @@ /* * Sherlock Library -- Logging * - * (c) 1997--2002 Martin Mares + * (c) 1997--2004 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -11,69 +11,17 @@ #include #include -#include #include -#include #include #include #include -static char log_progname[32], *log_name_patt; +static char log_progname[32]; char *log_filename; char *log_title; -static int log_pid; -static int log_params; -static int log_filename_size; -int log_switch_nest; +int log_pid; void (*log_die_hook)(void); - -void -log_fork(void) -{ - log_pid = getpid(); -} - -static void -do_log_switch(struct tm *tm) -{ - int fd, l; - char name[log_filename_size]; - - if (!log_name_patt || - log_filename[0] && !log_params) - return; - log_switch_nest++; - l = strftime(name, log_filename_size, log_name_patt, tm); - if (l < 0 || l >= log_filename_size) - die("Error formatting log file name: %m"); - if (strcmp(name, log_filename)) - { - strcpy(log_filename, name); - fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0666); - if (fd < 0) - die("Unable to open log file %s: %m", name); - close(2); - dup(fd); - close(fd); - close(1); - dup(2); - } - log_switch_nest--; -} - -void -log_switch(void) -{ - time_t tim = time(NULL); - do_log_switch(localtime(&tim)); -} - -static inline void -internal_log_switch(struct tm *tm) -{ - if (!log_switch_nest) - do_log_switch(tm); -} +void (*log_switch_hook)(struct tm *tm); void vlog_msg(unsigned int cat, const char *msg, va_list args) @@ -84,7 +32,8 @@ vlog_msg(unsigned int cat, const char *msg, va_list args) int buflen = 256; int l, l0, r; - internal_log_switch(tm); + if (log_switch_hook) + log_switch_hook(tm); while (1) { p = buf = alloca(buflen); @@ -171,8 +120,8 @@ log_basename(byte *n) byte *p = n; while (*n) - if (*n++ == '/') - p = n; + if (*n++ == '/') + p = n; return p; } @@ -186,26 +135,3 @@ log_init(byte *argv0) log_title = log_progname; } } - -void -log_file(byte *name) -{ - if (name) - { - if (log_name_patt) - xfree(log_name_patt); - if (log_filename) - { - xfree(log_filename); - log_filename = NULL; - } - log_name_patt = xstrdup(name); - log_params = !!strchr(name, '%'); - log_filename_size = strlen(name) + 64; /* 63 is an upper bound on expansion of % escapes */ - log_filename = xmalloc(log_filename_size); - log_filename[0] = 0; - log_switch(); - close(0); - open("/dev/null", O_RDWR, 0); - } -}