diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2013-03-08 12:54:45 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-03-08 12:54:45 +0100 |
commit | 6fe90d79858fdc149f7a9267d72d905d854fbd75 (patch) | |
tree | 20810dbd074ec8f6dfef95545ebee3c5dcdbe3ce | |
parent | 144bf26b243743916f651bc1bdd9997f44a79eeb (diff) | |
download | sircbot-6fe90d79858fdc149f7a9267d72d905d854fbd75.tar.bz2 sircbot-6fe90d79858fdc149f7a9267d72d905d854fbd75.tar.xz |
add support for 'multimode'
we append nick to pidfile and connection socket so we can run multiple
instances of sircbot on same machine.
-rw-r--r-- | sircbot.c | 29 |
1 files changed, 22 insertions, 7 deletions
@@ -24,8 +24,8 @@ Intended usage is git hook that sends commits, etc. #define PROGNAME "sircbot" -#if !defined(DEFAULT_PIDFILE) -#define DEFAULT_PIDFILE "/var/run/" PROGNAME "/" PROGNAME ".pid" +#if !defined(DEFAULT_PIDFILE_PREFIX) +#define DEFAULT_PIDFILE_PREFIX "/var/run/" PROGNAME "/" PROGNAME #endif struct tq_string { @@ -571,14 +571,15 @@ void sighandler(int signal) static void usage_exit(int exitcode) { printf("sircbot " VERSION "\n" - "usage: sircbot [-fN] [-n nick] [-r flushrate] [-s server] [-p port]\n" + "usage: sircbot [-fmN] [-n nick] [-r flushrate] [-s server] [-p port]\n" " [-l logfile] [-u user] [-P pass] CHANNEL\n"); exit(exitcode); } int main(int argc, char *argv[]) { - const char *pidfile = DEFAULT_PIDFILE; + char pidfile_suffix[64] = ".pid"; + static char pidfile[PATH_MAX] = ""; const char *server = "irc.freenode.org"; const char *nick = "sircbot"; const char *user = "sircbot"; @@ -586,10 +587,10 @@ int main(int argc, char *argv[]) const char *pass = NULL; const char *logfile = "/dev/null"; struct sircbot_session sb; - int i, c, port = 6667; + int i, c, port = 6667, multimode = 0; sb.runhooks = 1; - while ((c = getopt(argc, argv, "fl:n:Np:P:r:s:")) != -1) { + while ((c = getopt(argc, argv, "fl:mn:Np:P:r:s:")) != -1) { switch (c) { case 'f': foreground = 1; @@ -597,6 +598,9 @@ int main(int argc, char *argv[]) case 'l': logfile = optarg; break; + case 'm': + multimode = 1; + break; case 'n': nick = optarg; break; @@ -634,13 +638,24 @@ int main(int argc, char *argv[]) sb.chan[i].listen_fd = -1; sb.chan[i].name = strdup(argv[i]); sb.chan[i].last_closetime = 0; - asprintf(&sb.chan[i].socket_path, "/var/run/sircbot/%s", argv[i]); + if (multimode) { + asprintf(&sb.chan[i].socket_path, + "/var/run/sircbot/%s-%s", argv[i], nick); + } else { + asprintf(&sb.chan[i].socket_path, + "/var/run/sircbot/%s", argv[i]); + } unlink(sb.chan[i].socket_path); sb.chan[i].indata_head.next = NULL; sb.chan[i].fd_array = NULL; sb.chan[i].fd_array_size = 0; } + if (multimode) + snprintf(pidfile_suffix, sizeof(pidfile_suffix), + "-%s.pid", nick); + snprintf(pidfile, sizeof(pidfile_suffix), "%s%s", + DEFAULT_PIDFILE_PREFIX, pidfile_suffix); /* daemonize */ if (!foreground) { if (daemonize(pidfile, logfile) < 0) |