fix possible crash on user deletion
[srvx.git] / src / mod-snoop.c
index 3d463a3702c629dd2ba5885ffb807f9870f8325a..1ca24c826ac1c83aaf9aa294c1a3e393a1296161 100644 (file)
@@ -42,7 +42,6 @@
 #include <arpa/inet.h>
 #endif
 
-extern time_t now;
 static struct {
     struct chanNode *channel;
     struct userNode *bot;
@@ -55,8 +54,12 @@ const char *snoop_module_deps[] = { NULL };
 static int finalized;
 int snoop_finalize(void);
 
-#define SNOOP(FORMAT, ARGS...) send_channel_message(snoop_cfg.channel, snoop_cfg.bot, "%s "FORMAT, timestamp , ## ARGS)
-#define UPDATE_TIMESTAMP() strftime(timestamp, sizeof(timestamp), "[%H:%M:%S]", localtime(&now))
+#if defined(GCC_VARMACROS)
+# define SNOOP(FORMAT, ARGS...) send_channel_message(snoop_cfg.channel, snoop_cfg.bot, "%s "FORMAT, timestamp, ARGS)
+#elif defined(C99_VARMACROS)
+# define SNOOP(FORMAT, ...) send_channel_message(snoop_cfg.channel, snoop_cfg.bot, "%s "FORMAT, timestamp, __VA_ARGS__)
+#endif
+#define UPDATE_TIMESTAMP() do { time_t feh = now; strftime(timestamp, sizeof(timestamp), "[%H:%M:%S]", localtime(&feh)); } while (0)
 
 static void
 snoop_nick_change(struct userNode *user, const char *old_nick) {
@@ -95,13 +98,12 @@ snoop_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *ch
     SNOOP("$bKICK$b %s from %s by %s", victim->nick, chan->name, (kicker ? kicker->nick : "some server"));
 }
 
-static int
+static void
 snoop_new_user(struct userNode *user) {
-    if (!snoop_cfg.enabled) return 0;
-    if (user->uplink->burst && !snoop_cfg.show_bursts) return 0;
+    if (!snoop_cfg.enabled) return;
+    if (user->uplink->burst && !snoop_cfg.show_bursts) return;
     UPDATE_TIMESTAMP();
-    SNOOP("$bNICK$b %s %s@%s [%s] on %s", user->nick, user->ident, user->hostname, inet_ntoa(user->ip), user->uplink->name);
-    return 0;
+    SNOOP("$bNICK$b %s %s@%s [%s] on %s", user->nick, user->ident, user->hostname, irc_ntoa(&user->ip), user->uplink->name);
 }
 
 static void
@@ -189,7 +191,7 @@ snoop_finalize(void) {
     mod_chanmode_init(&change);
     change.argc = 1;
     change.args[0].mode = MODE_CHANOP;
-    change.args[0].member = AddChannelUser(snoop_cfg.bot, snoop_cfg.channel);
+    change.args[0].u.member = AddChannelUser(snoop_cfg.bot, snoop_cfg.channel);
     mod_chanmode_announce(snoop_cfg.bot, snoop_cfg.channel, &change);
     return 1;
 }