]> git.imager.perl.org - imager.git/blobdiff - log.c
document the i_comment common tag
[imager.git] / log.c
diff --git a/log.c b/log.c
index 17aeb48009e3320628666cd1222cf6a60bcb7cbf..1306e1898385e5b29d5dfb05866a0b897d7b2bf5 100644 (file)
--- a/log.c
+++ b/log.c
@@ -1,4 +1,10 @@
+#include "imconfig.h"
 #include "log.h"
+#include <stdlib.h>
+#include <errno.h>
+#include "imerror.h"
+
+#ifdef IMAGER_LOG
 
 #define DTBUFF 50
 #define DATABUFF DTBUFF+3+10+1+5+1+1
@@ -10,14 +16,13 @@ static char  date_buffer[DTBUFF];
 static char  data_buffer[DATABUFF];
 
 
-#ifdef IMAGER_LOG
-
 /*
  * Logging is active
  */
 
-void
-m_init_log(const char* name,int level) {
+int
+i_init_log(const char* name,int level) {
+  i_clear_error();
   log_level = level;
   if (level < 0) {
     lg_file = NULL;
@@ -26,17 +31,21 @@ m_init_log(const char* name,int level) {
       lg_file = stderr;
     } else {
       if (NULL == (lg_file = fopen(name, "w+")) ) { 
-       fprintf(stderr,"Cannot open file '%s'\n",name);
-       exit(2);
+       i_push_errorf(errno, "Cannot open file '%s': (%d)", name, errno);
+       return 0;
       }
     }
   }
-  setvbuf(lg_file, NULL, _IONBF, BUFSIZ);
-  mm_log((0,"Imager - log started (level = %d)\n", level));
+  if (lg_file) {
+    setvbuf(lg_file, NULL, _IONBF, BUFSIZ);
+    mm_log((0,"Imager - log started (level = %d)\n", level));
+  }
+
+  return lg_file != NULL;
 }
 
 void
-m_fatal(int exitcode,const char *fmt, ... ) {
+i_fatal(int exitcode,const char *fmt, ... ) {
   va_list ap;
   time_t timi;
   struct tm *str_tm;
@@ -53,21 +62,18 @@ m_fatal(int exitcode,const char *fmt, ... ) {
   exit(exitcode);
 }
 
-#else
 
 /*
- * Logging is inactive - insert dummy functions
- */
-
-void init_log(const char* name,int onoff) {}
-void m_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }
+=item i_loog(level, format, ...)
+=category Logging
 
+This is an internal function called by the mm_log() macro.
 
-#endif
-
+=cut
+*/
 
 void
-m_loog(int level,const char *fmt, ... ) {
+i_loog(int level,const char *fmt, ... ) {
   va_list ap;
   if (level > log_level) return;
   if (lg_file != NULL) {
@@ -80,9 +86,17 @@ m_loog(int level,const char *fmt, ... ) {
   }
 }
 
+/*
+=item i_lhead(file, line)
+=category Logging
+
+This is an internal function called by the mm_log() macro.
+
+=cut
+*/
 
 void
-m_lhead(const char *file, int line) {
+i_lhead(const char *file, int line) {
   time_t timi;
   struct tm *str_tm;
   
@@ -90,6 +104,33 @@ m_lhead(const char *file, int line) {
     timi = time(NULL);
     str_tm = localtime(&timi);
     strftime(date_buffer, DTBUFF, date_format, str_tm);
+#ifdef IMAGER_SNPRINTF
+    snprintf(data_buffer, sizeof(data_buffer), "[%s] %10s:%-5d ", date_buffer, file, line);
+#else
     sprintf(data_buffer, "[%s] %10s:%-5d ", date_buffer, file, line);
+#endif
   }
 }
+
+#else
+
+/*
+ * Logging is inactive - insert dummy functions
+ */
+
+int i_init_log(const char* name,int onoff) {
+  i_clear_error();
+  i_push_error(0, "Logging disabled");
+  return 0;
+}
+
+void i_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }
+
+void
+i_loog(int level,const char *fmt, ... ) {
+}
+
+void
+i_lhead(const char *file, int line) { }
+
+#endif