diff options
Diffstat (limited to 'functions.c')
-rw-r--r-- | functions.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/functions.c b/functions.c index 5dbeb0c..abffb0b 100644 --- a/functions.c +++ b/functions.c @@ -990,3 +990,64 @@ void cleanexit(SSL *server_ssl, struct client *clients, int sourcefd, struct irc exit(0); } + +// Re-read the configuration file, setting 'failuremsg' to a failure message on failure. +// Returns 1 on success or 0 on failure. +int rehash(struct settings *settings, char *failuremsg) { + // TODO - Try to share some/all of this code with the initial main() settings loading + + // What is the auto replay mode? + char oldreplaymode[MAXDATASIZE]; + strcpy(oldreplaymode, settings->replaymode); + if (!getconfstr("replaymode", settings->conffile, settings->replaymode)) { + strcpy(settings->replaymode, oldreplaymode); + strcpy(failuremsg, "error getting 'replaymode' from configuration file"); + return 0; + } else { + if (strcmp(settings->replaymode, "none") && strcmp(settings->replaymode, "time") && strcmp(settings->replaymode, "lastspoke")) { + strcpy(settings->replaymode, oldreplaymode); + strcpy(failuremsg, "replaymode in configuration file must be one of \"none\", \"time\", or \"lastspoke\""); + return 0; + } + } + + // How many seconds of replay log should automatically be replayed - TODO - Can we do error checking on this? + int oldreplayseconds = settings->replayseconds; + settings->replayseconds = getconfint("replayseconds", settings->conffile); + if (errno == ECONFINT) { + settings->replayseconds = oldreplayseconds; + strcpy(failuremsg, "error getting 'replayseconds' from configuration file"); + return 0; + } + + // Is logging enabled? + int oldlogging = settings->logging; + settings->logging = getconfint("logging", settings->conffile); + if (errno == ECONFINT) { + settings->logging = oldlogging; + strcpy(failuremsg, "error getting 'logging' from configuration file"); + return 0; + } + + // Is replay logging enabled? + int oldreplaylogging = settings->replaylogging; + settings->replaylogging = getconfint("replaylogging", settings->conffile); + if (errno == ECONFINT) { + settings->replaylogging = oldreplaylogging; + strcpy(failuremsg, "error getting 'replaylogging' from configuration file"); + return 0; + } + + // Is debugging enabled? + int olddebug = debug; + debug = getconfint("debug", settings->conffile); + if (errno == ECONFINT) { + debug = olddebug; + strcpy(failuremsg, "error getting 'debug' from configuration file"); + return 0; + } + + // All is good, no failure message, return 1. + failuremsg[0] = '\0'; + return 1; +} |