summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/log.h5
-rw-r--r--src/conf.c9
-rw-r--r--src/conf_parser.c2
-rw-r--r--src/conf_parser.y2
-rw-r--r--src/ircd.c2
-rw-r--r--src/log.c37
6 files changed, 34 insertions, 23 deletions
diff --git a/include/log.h b/include/log.h
index 76e0767..d5502a6 100644
--- a/include/log.h
+++ b/include/log.h
@@ -39,8 +39,9 @@ enum log_type {
LOG_TYPE_LAST
};
-extern int log_add_file(enum log_type, size_t, const char *);
-extern void log_close_all(void);
+extern void log_set_file(enum log_type, size_t, const char *);
+extern void log_del_all(void);
+extern void log_reopen_all(void);
extern void ilog(enum log_type, const char *, ...) AFP(2,3);
#endif /* INCLUDED_s_log_h */
diff --git a/src/conf.c b/src/conf.c
index af5c662..ff564f6 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -1287,11 +1287,8 @@ rehash(int sig)
load_conf_modules();
rehashed_klines = 1;
-/* XXX */
- if (ConfigLoggingEntry.use_logging)
- log_close_all();
- return(0);
+ return 0;
}
/* set_default_conf()
@@ -1338,7 +1335,7 @@ set_default_conf(void)
AdminInfo.email = NULL;
AdminInfo.description = NULL;
- log_close_all();
+ log_del_all();
ConfigLoggingEntry.use_logging = 1;
@@ -1774,6 +1771,8 @@ read_conf_files(int cold)
read_conf(conf_parser_ctx.conf_file);
fclose(conf_parser_ctx.conf_file);
+ log_reopen_all();
+
add_isupport("NICKLEN", NULL, ServerInfo.max_nick_length);
add_isupport("NETWORK", ServerInfo.network_name, -1);
diff --git a/src/conf_parser.c b/src/conf_parser.c
index 07c3b10..3a7ca94 100644
--- a/src/conf_parser.c
+++ b/src/conf_parser.c
@@ -3777,7 +3777,7 @@ yyreduce:
break;
if (block_state.type.value && block_state.file.buf[0])
- log_add_file(block_state.type.value, block_state.size.value,
+ log_set_file(block_state.type.value, block_state.size.value,
block_state.file.buf);
}
break;
diff --git a/src/conf_parser.y b/src/conf_parser.y
index 4f1a4db..3112e24 100644
--- a/src/conf_parser.y
+++ b/src/conf_parser.y
@@ -896,7 +896,7 @@ logging_file_entry:
break;
if (block_state.type.value && block_state.file.buf[0])
- log_add_file(block_state.type.value, block_state.size.value,
+ log_set_file(block_state.type.value, block_state.size.value,
block_state.file.buf);
};
diff --git a/src/ircd.c b/src/ircd.c
index 7581747..65033f3 100644
--- a/src/ircd.c
+++ b/src/ircd.c
@@ -534,7 +534,7 @@ main(int argc, char *argv[])
eventInit();
/* We need this to initialise the fd array before anything else */
fdlist_init();
- log_add_file(LOG_TYPE_IRCD, 0, logFileName);
+ log_set_file(LOG_TYPE_IRCD, 0, logFileName);
check_can_use_v6();
init_comm(); /* This needs to be setup early ! -- adrian */
/* Check if there is pidfile and daemon already running */
diff --git a/src/log.c b/src/log.c
index 6f75350..a7a9de3 100644
--- a/src/log.c
+++ b/src/log.c
@@ -38,30 +38,40 @@ static struct {
} log_type_table[LOG_TYPE_LAST];
-int
-log_add_file(enum log_type type, size_t size, const char *path)
+void
+log_set_file(enum log_type type, size_t size, const char *path)
{
- if (log_type_table[type].file)
- fclose(log_type_table[type].file);
-
strlcpy(log_type_table[type].path, path, sizeof(log_type_table[type].path));
log_type_table[type].size = size;
- return (log_type_table[type].file = fopen(path, "a")) != NULL;
+ if (type == LOG_TYPE_IRCD)
+ log_type_table[type].file = fopen(log_type_table[type].path, "a");
}
void
-log_close_all(void)
+log_del_all(void)
{
unsigned int type = 0;
while (++type < LOG_TYPE_LAST)
- {
- if (log_type_table[type].file == NULL)
- continue;
+ log_type_table[type].path[0] = '\0';
+}
+
+void
+log_reopen_all(void)
+{
+ unsigned int type = 0;
- fclose(log_type_table[type].file);
- log_type_table[type].file = NULL;
+ while (++type < LOG_TYPE_LAST)
+ {
+ if (log_type_table[type].file)
+ {
+ fclose(log_type_table[type].file);
+ log_type_table[type].file = NULL;
+ }
+
+ if (log_type_table[type].path[0])
+ log_type_table[type].file = fopen(log_type_table[type].path, "a");
}
}
@@ -119,5 +129,6 @@ ilog(enum log_type type, const char *fmt, ...)
unlink(buf);
rename(log_type_table[type].path, buf);
- log_add_file(type, log_type_table[type].size, log_type_table[type].path);
+ log_set_file(type, log_type_table[type].size, log_type_table[type].path);
+ log_type_table[type].file = fopen(log_type_table[type].path, "a");
}