version 1.41, 2008/06/10 04:50:25 |
version 1.42, 2011/06/17 21:44:30 |
|
|
static int log_on_stderr = 1; |
static int log_on_stderr = 1; |
static int log_facility = LOG_AUTH; |
static int log_facility = LOG_AUTH; |
static char *argv0; |
static char *argv0; |
|
static log_handler_fn *log_handler; |
|
static void *log_handler_ctx; |
|
|
extern char *__progname; |
extern char *__progname; |
|
|
|
|
exit(1); |
exit(1); |
} |
} |
|
|
|
log_handler = NULL; |
|
log_handler_ctx = NULL; |
|
|
log_on_stderr = on_stderr; |
log_on_stderr = on_stderr; |
if (on_stderr) |
if (on_stderr) |
return; |
return; |
|
|
#define MSGBUFSIZ 1024 |
#define MSGBUFSIZ 1024 |
|
|
void |
void |
|
set_log_handler(log_handler_fn *handler, void *ctx) |
|
{ |
|
log_handler = handler; |
|
log_handler_ctx = ctx; |
|
} |
|
|
|
void |
|
do_log2(LogLevel level, const char *fmt,...) |
|
{ |
|
va_list args; |
|
|
|
va_start(args, fmt); |
|
do_log(level, fmt, args); |
|
va_end(args); |
|
} |
|
|
|
void |
do_log(LogLevel level, const char *fmt, va_list args) |
do_log(LogLevel level, const char *fmt, va_list args) |
{ |
{ |
struct syslog_data sdata = SYSLOG_DATA_INIT; |
struct syslog_data sdata = SYSLOG_DATA_INIT; |
|
|
char *txt = NULL; |
char *txt = NULL; |
int pri = LOG_INFO; |
int pri = LOG_INFO; |
int saved_errno = errno; |
int saved_errno = errno; |
|
log_handler_fn *tmp_handler; |
|
|
if (level > log_level) |
if (level > log_level) |
return; |
return; |
|
|
pri = LOG_ERR; |
pri = LOG_ERR; |
break; |
break; |
} |
} |
if (txt != NULL) { |
if (txt != NULL && log_handler == NULL) { |
snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt); |
snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt); |
vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args); |
vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args); |
} else { |
} else { |
vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); |
vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); |
} |
} |
strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_SAFE|VIS_OCTAL); |
strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_SAFE|VIS_OCTAL); |
if (log_on_stderr) { |
if (log_handler != NULL) { |
|
/* Avoid recursion */ |
|
tmp_handler = log_handler; |
|
log_handler = NULL; |
|
tmp_handler(level, fmtbuf, log_handler_ctx); |
|
log_handler = tmp_handler; |
|
} else if (log_on_stderr) { |
snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf); |
snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf); |
write(STDERR_FILENO, msgbuf, strlen(msgbuf)); |
write(STDERR_FILENO, msgbuf, strlen(msgbuf)); |
} else { |
} else { |