asserts
[oweals/gnunet.git] / src / util / common_logging.c
index a19821511143447e5d2879a1a8f1b76c9d18e100..73a374f465bbc50738bf2efc54633ac927e6c1b8 100644 (file)
  */
 #define BULK_TRACK_SIZE 256
 
+/**
+ * How many characters do we use for matching of
+ * bulk components?
+ */
+#define COMP_TRACK_SIZE 32
+
 /**
  * How many characters can a date/time string
  * be at most?
@@ -99,9 +105,9 @@ static struct GNUNET_TIME_Absolute last_bulk_time;
 static unsigned int last_bulk_repeat;
 
 /**
- * Component when the last bulk was logged.
+ * Component when the last bulk was logged.  Will be 0-terminated.
  */
-static const char *last_bulk_comp;
+static char last_bulk_comp[COMP_TRACK_SIZE+1];
 
 /**
  * Running component.
@@ -163,6 +169,7 @@ GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfile)
 {
   FILE *altlog;
   int dirwarn;
+  char *fn;
 
   GNUNET_free_non_null (component);
   GNUNET_asprintf (&component,
@@ -172,17 +179,20 @@ GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfile)
   min_level = get_type (loglevel);
   if (logfile == NULL)
     return GNUNET_OK;
-  dirwarn = (GNUNET_OK !=  GNUNET_DISK_directory_create_for_file (logfile));
-  altlog = FOPEN (logfile, "a");
+  fn = GNUNET_STRINGS_filename_expand (logfile);
+  dirwarn = (GNUNET_OK !=  GNUNET_DISK_directory_create_for_file (fn));
+  altlog = FOPEN (fn, "a");
   if (altlog == NULL)
     {
-      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", logfile);
+      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn);
       if (dirwarn) 
        GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                    _("Failed to create or access directory for log file `%s'\n"), 
-                   logfile);
+                   fn);
+      GNUNET_free (fn);
       return GNUNET_SYSERR;
     }
+  GNUNET_free (fn);
   if (GNUNET_stderr != NULL)
     fclose (GNUNET_stderr);
   GNUNET_stderr = altlog;
@@ -250,8 +260,11 @@ output_message (enum GNUNET_ErrorType kind,
 {
   struct CustomLogger *pos;
   if (GNUNET_stderr != NULL)
-    fprintf (GNUNET_stderr, "%s %s %s %s", datestr, comp, 
-             GNUNET_error_type_to_string (kind), msg);
+    {
+      fprintf (GNUNET_stderr, "%s %s %s %s", datestr, comp, 
+              GNUNET_error_type_to_string (kind), msg);
+      fflush (GNUNET_stderr);
+    }
   pos = loggers;
   while (pos != NULL)
     {
@@ -379,7 +392,7 @@ mylog (enum GNUNET_ErrorType kind,
   last_bulk_repeat = 0;
   last_bulk_kind = kind;
   last_bulk_time = GNUNET_TIME_absolute_get ();
-  last_bulk_comp = comp;
+  strncpy (last_bulk_comp, comp, sizeof (last_bulk_comp));
   output_message (kind, comp, date, buf);
   free (buf);
 }