diff options
author | Ralph Boehme <slow@samba.org> | 2018-12-12 22:49:15 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2018-12-20 03:19:27 +0100 |
commit | 3dbda63284cdeb2f060931c85388842627c955a1 (patch) | |
tree | 16cc664a56f129938e835bff277ef5786c6e9f91 /lib | |
parent | 781f5a95edde4cd27627515869bfe2fc626fbb3a (diff) | |
download | samba-3dbda63284cdeb2f060931c85388842627c955a1.tar.gz |
debug: remove fd and debugf from state, use dbgc_config[DBGC_ALL]
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/util/debug.c | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/lib/util/debug.c b/lib/util/debug.c index 81a1421eb2f..278562596fa 100644 --- a/lib/util/debug.c +++ b/lib/util/debug.c @@ -86,21 +86,18 @@ /* state variables for the debug system */ static struct { bool initialized; - int fd; /* The log file handle */ enum debug_logtype logtype; /* The type of logging we are doing: eg stdout, file, stderr */ const char *prog_name; bool reopening_logs; bool schedule_reopen_logs; struct debug_settings settings; - char *debugf; debug_callback_fn callback; void *callback_private; } state = { .settings = { .timestamp_logs = true }, - .fd = 2 /* stderr by default */ }; struct debug_class { @@ -162,7 +159,9 @@ static const char *default_classname_table[] = { * This is to allow reading of dbgc_config before the debug * system has been initialized. */ -static struct debug_class debug_class_list_initial[ARRAY_SIZE(default_classname_table)]; +static struct debug_class debug_class_list_initial[ARRAY_SIZE(default_classname_table)] = { + [DBGC_ALL] = (struct debug_class) { .fd = 2 }, +}; static size_t debug_num_classes = 0; static struct debug_class *dbgc_config = debug_class_list_initial; @@ -215,7 +214,7 @@ static void debug_file_log(int msg_level, if (dbgc_config[current_msg_class].fd != -1) { fd = dbgc_config[current_msg_class].fd; } else { - fd = state.fd; + fd = dbgc_config[DBGC_ALL].fd; } do { @@ -934,6 +933,7 @@ static void debug_init(void) for (i = 0; i < ARRAY_SIZE(default_classname_table); i++) { debug_add_class(default_classname_table[i]); } + dbgc_config[DBGC_ALL].fd = 2; for (i = 0; i < ARRAY_SIZE(debug_backends); i++) { debug_backends[i].log_level = -1; @@ -1016,8 +1016,8 @@ void debug_set_logfile(const char *name) /* this copes with calls when smb.conf is not loaded yet */ return; } - TALLOC_FREE(state.debugf); - state.debugf = talloc_strdup(NULL, name); + TALLOC_FREE(dbgc_config[DBGC_ALL].logfile); + dbgc_config[DBGC_ALL].logfile = talloc_strdup(NULL, name); } static void debug_close_fd(int fd) @@ -1101,6 +1101,7 @@ bool reopen_logs_internal(void) { mode_t oldumask; int new_fd = 0; + size_t i; bool ok; if (state.reopening_logs) { @@ -1115,14 +1116,14 @@ bool reopen_logs_internal(void) return true; case DEBUG_STDOUT: case DEBUG_DEFAULT_STDOUT: - debug_close_fd(state.fd); - state.fd = 1; + debug_close_fd(dbgc_config[DBGC_ALL].fd); + dbgc_config[DBGC_ALL].fd = 1; return true; case DEBUG_DEFAULT_STDERR: case DEBUG_STDERR: - debug_close_fd(state.fd); - state.fd = 2; + debug_close_fd(dbgc_config[DBGC_ALL].fd); + dbgc_config[DBGC_ALL].fd = 2; return true; case DEBUG_FILE: @@ -1131,13 +1132,19 @@ bool reopen_logs_internal(void) oldumask = umask( 022 ); - if (!state.debugf) { + for (i = DBGC_ALL; i < debug_num_classes; i++) { + if (dbgc_config[DBGC_ALL].logfile != NULL) { + break; + } + } + if (i == debug_num_classes) { return false; } state.reopening_logs = true; - ok = reopen_one_log(&state.fd, state.debugf); + ok = reopen_one_log(&dbgc_config[DBGC_ALL].fd, + dbgc_config[DBGC_ALL].logfile); /* Fix from klausr@ITAP.Physik.Uni-Stuttgart.De * to fix problem where smbd's that generate less @@ -1151,7 +1158,7 @@ bool reopen_logs_internal(void) * catch output into logs. */ if (new_fd != -1) { - if (dup2(state.fd, 2) == -1) { + if (dup2(dbgc_config[DBGC_ALL].fd, 2) == -1) { /* Close stderr too, if dup2 can't point it - at the logfile. There really isn't much that can be done on such a fundamental @@ -1199,7 +1206,7 @@ bool need_to_check_log_size(void) return false; } - if (state.fd > 2) { + if (dbgc_config[DBGC_ALL].fd > 2) { return true; } @@ -1268,9 +1275,7 @@ static void do_check_log_size(off_t maxlog) { size_t i; - do_one_check_log_size(maxlog, &state.fd, state.debugf); - - for (i = DBGC_ALL + 1; i < debug_num_classes; i++) { + for (i = DBGC_ALL; i < debug_num_classes; i++) { if (dbgc_config[i].fd == -1) { continue; } @@ -1318,10 +1323,11 @@ void check_log_size( void ) do_check_log_size(maxlog); /* - * Here's where we need to panic if state.fd == 0 or -1 (invalid values) + * Here's where we need to panic if dbgc_config[DBGC_ALL].fd == 0 or -1 + * (invalid values) */ - if (state.fd <= 0) { + if (dbgc_config[DBGC_ALL].fd <= 0) { /* This code should only be reached in very strange * circumstances. If we merely fail to open the new log we * should stick with the old one. ergo this should only be @@ -1332,9 +1338,10 @@ void check_log_size( void ) int fd = open( "/dev/console", O_WRONLY, 0); if (fd != -1) { smb_set_close_on_exec(fd); - state.fd = fd; - DEBUG(0,("check_log_size: open of debug file %s failed - using console.\n", - state.debugf )); + dbgc_config[DBGC_ALL].fd = fd; + DBG_ERR("check_log_size: open of debug file %s failed " + "- using console.\n", + dbgc_config[DBGC_ALL].logfile); } else { /* * We cannot continue without a debug file handle. @@ -1364,10 +1371,12 @@ static void Debug1(const char *msg) case DEBUG_STDERR: case DEBUG_DEFAULT_STDOUT: case DEBUG_DEFAULT_STDERR: - if (state.fd > 0) { + if (dbgc_config[DBGC_ALL].fd > 0) { ssize_t ret; do { - ret = write(state.fd, msg, strlen(msg)); + ret = write(dbgc_config[DBGC_ALL].fd, + msg, + strlen(msg)); } while (ret == -1 && errno == EINTR); } break; |