aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sircbot.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/sircbot.c b/sircbot.c
index 2ac2e94..9ec515a 100644
--- a/sircbot.c
+++ b/sircbot.c
@@ -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)