]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Allow logging to stderr as well.
authorMartin Mares <mj@ucw.cz>
Mon, 6 Dec 1999 13:51:04 +0000 (13:51 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 6 Dec 1999 13:51:04 +0000 (13:51 +0000)
sysdep/unix/config.Y
sysdep/unix/io.c
sysdep/unix/log.c

index bd9c382287da10299290204ff55572aa750b7ce4..f0a517e9c962e697a62b852e71432f1b4929f65e 100644 (file)
@@ -12,29 +12,33 @@ CF_HDR
 
 CF_DECLS
 
-CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG)
+CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG, STDERR)
 
 %type <i> log_mask log_mask_list log_cat
+%type <g> log_file
 
 CF_GRAMMAR
 
 CF_ADDTO(conf, log_config)
 
-log_config: LOG TEXT log_mask ';' {
-    struct log_config *c = cfg_allocz(sizeof(struct log_config));
-    FILE *f = rfopen(new_config->pool, $2, "a");
-    if (!f) cf_error("Unable to open log file `%s': %m", $2);
-    c->mask = $3;
-    c->fh = f;
-    add_tail(&new_config->logfiles, &c->n);
-  }
- | LOG SYSLOG log_mask ';' {
+log_config: LOG log_file log_mask ';' {
     struct log_config *c = cfg_allocz(sizeof(struct log_config));
+    c->fh = $2;
     c->mask = $3;
     add_tail(&new_config->logfiles, &c->n);
   }
  ;
 
+log_file:
+   TEXT {
+     FILE *f = tracked_fopen(new_config->pool, $1, "a");
+     if (!f) cf_error("Unable to open log file `%s': %m", $1);
+     $$ = f;
+   }
+ | SYSLOG { $$ = NULL; }
+ | STDERR { $$ = stderr; }
+ ;
+
 log_mask:
    ALL { $$ = ~0; }
  | '{' log_mask_list '}' { $$ = $2; }
index 7d6a6f22e23cbe97040e61c4ca0748530e9edda0..45db1a1076fe7af0a2b2dd788aca25adfe522349 100644 (file)
@@ -83,7 +83,7 @@ static struct resclass rf_class = {
 };
 
 void *
-rfopen(pool *p, char *name, char *mode)
+tracked_fopen(pool *p, char *name, char *mode)
 {
   FILE *f = fopen(name, mode);
 
index afc30a929cc314f7dce4d6e5c98a0ccb6af04a8d..b4a028da49cd8a4053d32b3d8a7536caa40afb7e 100644 (file)
@@ -167,7 +167,10 @@ log_init(int debug)
 void
 log_switch(list *l)
 {
-  current_log_list = l;
+  if (EMPTY_LIST(*l))
+    current_log_list = &init_log_list;
+  else
+    current_log_list = l;
 }
 
 void