}
-static void free_exceptlist(struct irc_channel_state *c)
-{
- GList *g;
- g_assert(c);
-
- g = c->exceptlist;
- while(g) {
- g_free(g->data);
- g = g_list_remove(g, g->data);
- }
- c->exceptlist = NULL;
-}
-
gboolean nicklist_add_entry(GList **nicklist, const char *opt_arg,
const char *by_nick)
{
g_free(be);
}
-static char *find_exceptlist_entry(GList *entries, const char *entry)
-{
- GList *gl;
- for (gl = entries; gl; gl = gl->next) {
- if (!strcmp(gl->data, entry))
- return gl->data;
- }
- return NULL;
-}
-
static char *find_realnamebanlist_entry(GList *entries, const char *entry)
{
GList *gl;
}
if (!c->exceptlist_started) {
- free_exceptlist(c);
+ free_nicklist(&c->exceptlist);
c->exceptlist_started = TRUE;
}
- c->exceptlist = g_list_append(c->exceptlist, g_strdup(l->args[3]));
+ nicklist_add_entry(&c->exceptlist, l->args[3], NULL);
}
static void handle_end_exceptlist(struct irc_network_state *s, const struct irc_line *l)
if (mode == 'b') { /* Ban */
if (opt_arg == NULL) {
- network_state_log(LOG_WARNING, s, "Missing argument for ban MODE set/unset");
+ network_state_log(LOG_WARNING, s, "Missing argument for %c MODE set/unset", mode);
return -1;
}
nicklist_add_entry(&c->banlist, opt_arg, by?by->nick:NULL);
} else {
if (!nicklist_remove_entry(&c->banlist, opt_arg)) {
- network_state_log(LOG_WARNING, s, "Unable to remove nonpresent banlist entry '%s' on %s", opt_arg, c->name);
+ network_state_log(LOG_WARNING, s, "Unable to remove nonpresent %c MODE entry '%s' on %s", mode, opt_arg, c->name);
return 1;
}
}
}
if (set) {
- c->exceptlist = g_list_append(c->exceptlist, g_strdup(opt_arg));
+ nicklist_add_entry(&c->exceptlist, opt_arg, NULL);
} else {
- char *be = find_exceptlist_entry(c->exceptlist, opt_arg);
- if (be == NULL) {
+ if (!nicklist_remove_entry(&c->exceptlist, opt_arg)) {
network_state_log(LOG_WARNING, s, "Unable to remove nonpresent ban except list entry '%s'", opt_arg);
return 1;
}
- c->exceptlist = g_list_remove(c->exceptlist, be);
- g_free(be);
}
return 1;
} else if (mode == 'J') { /* join throttling */