Fix unnecessary warnings.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 24 Jul 2008 19:43:51 +0000 (21:43 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 24 Jul 2008 19:43:51 +0000 (21:43 +0200)
lib/state.c
lib/state.h

index d8f1a9192e7791c92b192f1445a649b6648ddeef..c730fe878e7b2684c7b3cd4f8196eda2f41294fa 100644 (file)
@@ -655,11 +655,14 @@ static void handle_invitelist_entry(struct irc_network_state *s, const struct ir
 static void handle_end_invitelist(struct irc_network_state *s, const struct irc_line *l) 
 {
        struct irc_channel_state *c = find_channel(s, l->args[2]);
-       if (c != NULL)
-               c->invitelist_started = FALSE;
-       else 
+       if (c == NULL) {
                network_state_log(LOG_WARNING, s, 
                          "Can't end invitelist for %s: channel not found", l->args[2]);
+               return;
+       }
+
+       c->invitelist_started = FALSE;
+       channel_mode_nicklist_present(c,'I') = TRUE;
 }
 
 static void handle_exceptlist_entry(struct irc_network_state *s, const struct irc_line *l) 
@@ -687,11 +690,13 @@ static void handle_exceptlist_entry(struct irc_network_state *s, const struct ir
 static void handle_end_exceptlist(struct irc_network_state *s, const struct irc_line *l) 
 {
        struct irc_channel_state *c = find_channel(s, l->args[2]);
-       if (c != NULL)
-               c->exceptlist_started = FALSE;
-       else 
+       if (c == NULL) {
                network_state_log(LOG_WARNING, s, 
                        "Can't end exceptlist for %s: channel not found", l->args[2]);
+               return;
+       }
+       c->exceptlist_started = FALSE;
+       channel_mode_nicklist_present(c,'e') = TRUE;
 }
 
 
@@ -723,11 +728,14 @@ static void handle_end_banlist(struct irc_network_state *s, const struct irc_lin
 {
        struct irc_channel_state *c = find_channel(s, l->args[2]);
 
-       if (c != NULL)
-               c->banlist_started = FALSE;
-       else 
+       if (c == NULL) {
                network_state_log(LOG_WARNING, s, 
                                "Can't end banlist for %s: channel not found", l->args[2]);
+               return;
+       }
+
+       c->banlist_started = FALSE;
+       channel_mode_nicklist_present(c,'b') = TRUE;
 }
 
 static void handle_whoreply(struct irc_network_state *s, const struct irc_line *l) 
@@ -832,13 +840,15 @@ static int channel_state_change_mode(struct irc_network_state *s, struct network
                        return -1;
                }
 
-               if (set) {
-                       nicklist_add_entry(&channel_mode_nicklist(c, mode), opt_arg, 
-                                                          by?by->nick:NULL, time(NULL));
-               } else {
-                       if (!nicklist_remove_entry(&channel_mode_nicklist(c, mode), opt_arg))  {
-                               network_state_log(LOG_WARNING, s, "Unable to remove nonpresent %c MODE entry '%s' on %s", mode, opt_arg, c->name);
-                               return 1;
+               if (channel_mode_nicklist_present(c, mode)) {
+                       if (set) {
+                               nicklist_add_entry(&channel_mode_nicklist(c, mode), opt_arg, 
+                                                                  by?by->nick:NULL, time(NULL));
+                       } else {
+                               if (!nicklist_remove_entry(&channel_mode_nicklist(c, mode), opt_arg))  {
+                                       network_state_log(LOG_WARNING, s, "Unable to remove nonpresent %c MODE entry '%s' on %s", mode, opt_arg, c->name);
+                                       return 1;
+                               }
                        }
                }
                return 1;
index 8835385f6dbc3f481645b180061b75c014abc486..87f4b78d427adab09859dff6e8f5a29e7edcf6bd 100644 (file)
@@ -82,6 +82,7 @@ gboolean nicklist_add_entry(GList **nicklist, const char *opt_arg,
                                                                   const char *by_nick, time_t at);
 gboolean nicklist_remove_entry(GList **nicklist, const char *hostmask);
 #define channel_mode_nicklist(ch,mode) ((ch)->chanmode_nicklist[(unsigned char)mode])
+#define channel_mode_nicklist_present(ch,mode) ((ch)->chanmode_nicklist_present[(unsigned char)mode])
 #define channel_mode_option(ch,mode) ((ch)->chanmode_option[(unsigned char)mode])
 
 /**
@@ -105,6 +106,7 @@ struct irc_channel_state {
        struct irc_network_state *network;
 
        GList *chanmode_nicklist[MAXMODES];
+       gboolean chanmode_nicklist_present[MAXMODES];
        char *chanmode_option[MAXMODES];
 };