X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/a482206ee8b4a6d97081ef70ccd3c324461fbb55..e1c0692925:/log.c diff --git a/log.c b/log.c index 2b0c32b1..efc604c1 100644 --- a/log.c +++ b/log.c @@ -1,3 +1,4 @@ +#define IMAGER_NO_CONTEXT #include "imageri.h" #include "imconfig.h" #include "log.h" @@ -10,15 +11,10 @@ #define DTBUFF 50 #define DATABUFF DTBUFF+3+10+1+5+1+1 -#if 0 -static int log_level = 0; -static FILE *lg_file = NULL; -static char date_buffer[DTBUFF]; -static char data_buffer[DATABUFF]; -#endif - #define LOG_DATE_FORMAT "%Y/%m/%d %H:%M:%S" +static i_mutex_t log_mutex; + static void im_vloog(pIMCTX, int level, const char *fmt, va_list ap); @@ -29,22 +25,35 @@ im_vloog(pIMCTX, int level, const char *fmt, va_list ap); int im_init_log(pIMCTX, const char* name,int level) { i_clear_error(); + + if (!log_mutex) { + log_mutex = i_mutex_new(); + } + + if (aIMCTX->lg_file) { + if (aIMCTX->own_log) + fclose(aIMCTX->lg_file); + aIMCTX->lg_file = NULL; + } + aIMCTX->log_level = level; if (level < 0) { aIMCTX->lg_file = NULL; } else { if (name == NULL) { aIMCTX->lg_file = stderr; + aIMCTX->own_log = 0; } else { if (NULL == (aIMCTX->lg_file = fopen(name, "w+")) ) { - i_push_errorf(errno, "Cannot open file '%s': (%d)", name, errno); + im_push_errorf(aIMCTX, errno, "Cannot open file '%s': (%d)", name, errno); return 0; } + aIMCTX->own_log = 1; + setvbuf(aIMCTX->lg_file, NULL, _IONBF, BUFSIZ); } } if (aIMCTX->lg_file) { - setvbuf(aIMCTX->lg_file, NULL, _IONBF, BUFSIZ); - mm_log((0,"Imager - log started (level = %d)\n", level)); + im_log((aIMCTX, 0,"Imager - log started (level = %d)\n", level)); } return aIMCTX->lg_file != NULL; @@ -53,9 +62,7 @@ im_init_log(pIMCTX, const char* name,int level) { void i_fatal(int exitcode,const char *fmt, ... ) { va_list ap; - time_t timi; - struct tm *str_tm; - pIMCTX = im_get_context(); + dIMCTX; if (aIMCTX->lg_file != NULL) { va_start(ap,fmt); @@ -68,8 +75,6 @@ i_fatal(int exitcode,const char *fmt, ... ) { void im_fatal(pIMCTX, int exitcode,const char *fmt, ... ) { va_list ap; - time_t timi; - struct tm *str_tm; if (aIMCTX->lg_file != NULL) { va_start(ap,fmt); @@ -94,8 +99,10 @@ im_vloog(pIMCTX, int level, const char *fmt, va_list ap) { struct tm *str_tm; char date_buffer[DTBUFF]; - if (!aIMCTX->lg_file || level > aIMCTX->log_level) + if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level) return; + + i_mutex_lock(log_mutex); timi = time(NULL); str_tm = localtime(&timi); @@ -104,14 +111,16 @@ im_vloog(pIMCTX, int level, const char *fmt, va_list ap) { aIMCTX->filename, aIMCTX->line, level); vfprintf(aIMCTX->lg_file, fmt, ap); fflush(aIMCTX->lg_file); + + i_mutex_unlock(log_mutex); } void i_loog(int level,const char *fmt, ... ) { - pIMCTX = im_get_context(); + dIMCTX; va_list ap; - if (!aIMCTX->lg_file || level > aIMCTX->log_level) + if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level) return; va_start(ap,fmt); @@ -123,7 +132,7 @@ void im_loog(pIMCTX, int level,const char *fmt, ... ) { va_list ap; - if (!aIMCTX->lg_file || level > aIMCTX->log_level) + if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level) return; va_start(ap,fmt); @@ -142,14 +151,14 @@ This is an internal function called by the mm_log() macro. void im_lhead(pIMCTX, const char *file, int line) { - if (aIMCTX->lg_file != NULL) { + if (aIMCTX && aIMCTX->lg_file != NULL) { aIMCTX->filename = file; aIMCTX->line = line; } } void i_lhead(const char *file, int line) { - pIMCTX = im_get_context(); + dIMCTX; im_lhead(aIMCTX, file, line); } @@ -160,7 +169,7 @@ void i_lhead(const char *file, int line) { * Logging is inactive - insert dummy functions */ -int i_init_log(const char* name,int onoff) { +int im_init_log(pIMCTX, const char* name,int onoff) { i_clear_error(); i_push_error(0, "Logging disabled"); return 0; @@ -173,7 +182,14 @@ void i_loog(int level,const char *fmt, ... ) { } +void +im_loog(pIMCTX, int level,const char *fmt, ... ) { +} + void i_lhead(const char *file, int line) { } +void +im_lhead(pIMCTX, const char *file, int line) { } + #endif