From 048b05cb299fed24341fc41047e4cbc2a72b44e8 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Mon, 30 Jul 2012 14:33:36 +0200 Subject: [PATCH] irc: fix bug with prefix chars which are in chanmodes with a type different from "B" (bug #36996) --- ChangeLog | 4 +++- src/plugins/irc/irc-mode.c | 12 ++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 558be5c13..048e2c96d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ WeeChat ChangeLog ================= Sébastien Helleu -v0.3.9-dev, 2012-07-29 +v0.3.9-dev, 2012-07-30 Version 0.3.9 (under dev!) @@ -41,6 +41,8 @@ Version 0.3.9 (under dev!) internal WeeChat charset) * guile: fix crash when unloading a script without pointer to interpreter * guile: fix path of guile include dirs in cmake build (patch #7790) +* irc: fix bug with prefix chars which are in chanmodes with a type different + from "B" (bug #36996) * irc: fix format of message "USER" (according to RFC 2812) (bug #36825) * irc: add bar item "buffer_modes", remove option irc.look.item_channel_modes (task #12022) diff --git a/src/plugins/irc/irc-mode.c b/src/plugins/irc/irc-mode.c index 5e97fac77..39faa7b83 100644 --- a/src/plugins/irc/irc-mode.c +++ b/src/plugins/irc/irc-mode.c @@ -58,6 +58,14 @@ irc_mode_get_chanmode_type (struct t_irc_server *server, char chanmode) char chanmode_type, *pos; const char *chanmodes, *ptr_chanmodes; + /* + * assume it is type 'B' if mode is in prefix + * (we first check that because some exotic servers like irc.webchat.org + * include the prefix chars in chanmodes as type 'A', which is wrong) + */ + if (irc_server_get_prefix_mode_index (server, chanmode) >= 0) + return 'B'; + chanmodes = irc_server_get_chanmodes (server); pos = strchr (chanmodes, chanmode); if (pos) @@ -75,10 +83,6 @@ irc_mode_get_chanmode_type (struct t_irc_server *server, char chanmode) return chanmode_type; } - /* assume it is type 'B' if mode is not in chanmodes but in prefix */ - if (irc_server_get_prefix_mode_index (server, chanmode) >= 0) - return 'B'; - /* unknown mode, type 'D' by default */ return 'D'; }