summaryrefslogtreecommitdiff
path: root/sysdep
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2018-12-04 16:55:25 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2018-12-04 16:55:25 +0100
commit3fda08e40532245ba69e14cdac0623a138b939f9 (patch)
tree0332e47c73ab22c92df09518de90fefa89453b2a /sysdep
parent0642fb4d456fe12e1bbeb2ffc2149433f228c02e (diff)
Unix: Change debugging options
The old behavior was that enabling debugging did many nontrivial changes in BIRD behavior. The patch changes it that these changes are generally independent. Compiling with --enable-debug now just enables compile-time debug macros, but do not automatically activate debug mode (-d) nor local mode (-l). Debug mode with output to file (-D) do not force foreground mode (-f), therefore there is no need for backgroud option (-b), which is removed. Also fixes a bug when the default log target in -D mode was stderr instead of given debug file.
Diffstat (limited to 'sysdep')
-rw-r--r--sysdep/unix/log.c38
-rw-r--r--sysdep/unix/main.c19
-rw-r--r--sysdep/unix/unix.h2
3 files changed, 28 insertions, 31 deletions
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
index 9a0fa550..c9064834 100644
--- a/sysdep/unix/log.c
+++ b/sysdep/unix/log.c
@@ -170,7 +170,8 @@ log_commit(int class, buffer *buf)
else
{
byte tbuf[TM_DATETIME_BUFFER_SIZE];
- if (!tm_format_real_time(tbuf, sizeof(tbuf), config->tf_log.fmt1, current_real_time()))
+ const char *fmt = config ? config->tf_log.fmt1 : "%F %T.%3f";
+ if (!tm_format_real_time(tbuf, sizeof(tbuf), fmt, current_real_time()))
strcpy(tbuf, "<error>");
if (l->limit)
@@ -322,36 +323,45 @@ debug(const char *msg, ...)
}
static list *
-default_log_list(int debug, int init, char **syslog_name)
+default_log_list(int initial, char **syslog_name)
{
- static list init_log_list;
- init_list(&init_log_list);
+ static list log_list;
+ init_list(&log_list);
*syslog_name = NULL;
#ifdef HAVE_SYSLOG_H
- if (!debug)
+ if (!dbgf)
{
static struct log_config lc_syslog = { .mask = ~0 };
- add_tail(&init_log_list, &lc_syslog.n);
+ add_tail(&log_list, &lc_syslog.n);
*syslog_name = bird_name;
- if (!init)
- return &init_log_list;
}
#endif
- static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1 };
- lc_stderr.fh = stderr;
- add_tail(&init_log_list, &lc_stderr.n);
- return &init_log_list;
+ if (dbgf && (dbgf != stderr))
+ {
+ static struct log_config lc_debug = { .mask = ~0 };
+ lc_debug.fh = dbgf;
+ add_tail(&log_list, &lc_debug.n);
+ }
+
+ if (initial || (dbgf == stderr))
+ {
+ static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1};
+ lc_stderr.fh = stderr;
+ add_tail(&log_list, &lc_stderr.n);
+ }
+
+ return &log_list;
}
void
-log_switch(int debug, list *logs, char *new_syslog_name)
+log_switch(int initial, list *logs, char *new_syslog_name)
{
struct log_config *l;
if (!logs || EMPTY_LIST(*logs))
- logs = default_log_list(debug, !logs, &new_syslog_name);
+ logs = default_log_list(initial, &new_syslog_name);
/* Close the logs to avoid pinning them on disk when deleted */
if (current_log_list)
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
index d2380501..c31ccd17 100644
--- a/sysdep/unix/main.c
+++ b/sysdep/unix/main.c
@@ -44,12 +44,6 @@
* Debugging
*/
-#ifdef DEBUGGING
-static int debug_flag = 1;
-#else
-static int debug_flag = 0;
-#endif
-
void
async_dump(void)
{
@@ -185,7 +179,7 @@ sysdep_preconfig(struct config *c)
int
sysdep_commit(struct config *new, struct config *old UNUSED)
{
- log_switch(debug_flag, &new->logfiles, new->syslog_name);
+ log_switch(0, &new->logfiles, new->syslog_name);
return 0;
}
@@ -750,21 +744,16 @@ parse_args(int argc, char **argv)
while ((c = getopt(argc, argv, opt_list)) >= 0)
switch (c)
{
- case 'b':
- run_in_foreground = 0;
- break;
case 'c':
config_name = optarg;
config_changed = 1;
break;
case 'd':
- debug_flag |= 1;
+ log_init_debug("");
run_in_foreground = 1;
break;
case 'D':
log_init_debug(optarg);
- debug_flag |= 2;
- run_in_foreground = 1;
break;
case 'p':
parse_and_exit = 1;
@@ -822,9 +811,7 @@ main(int argc, char **argv)
#endif
parse_args(argc, argv);
- if (debug_flag == 1)
- log_init_debug("");
- log_switch(debug_flag, NULL, NULL);
+ log_switch(1, NULL, NULL);
net_init();
resource_init();
diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h
index 12306167..0e1e98c0 100644
--- a/sysdep/unix/unix.h
+++ b/sysdep/unix/unix.h
@@ -116,7 +116,7 @@ void krt_io_init(void);
void main_thread_init(void);
void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */
-void log_switch(int debug, list *l, char *); /* Use l=NULL for initial switch */
+void log_switch(int initial, list *l, char *);
struct log_config {
node n;