# HG changeset patch # User Mikael Berthe # Date 1297533659 -3600 # Node ID 26e437e79e602f1bdc3acbe5cb42acc713f63391 # Parent 118524e9d7b6cbda99335d38f9aa2f52ca7877d7 Fix MUC whois / auto_whois This patch should fix issue #68: https://bitbucket.org/McKael/mcabber-crew/issue/68/ diff -r 118524e9d7b6 -r 26e437e79e60 mcabber/mcabber/commands.c --- a/mcabber/mcabber/commands.c Sat Feb 12 18:31:31 2011 +0100 +++ b/mcabber/mcabber/commands.c Sat Feb 12 19:00:59 2011 +0100 @@ -2830,9 +2830,11 @@ // cmd_room_whois(..) // If interactive is TRUE, chatmode can be enabled. -void cmd_room_whois(gpointer bud, char *arg, guint interactive) +// Please note that usernick is expected in UTF-8 locale iff interactive is FALSE +// (in order to work correctly with auto_whois). +void cmd_room_whois(gpointer bud, const char *usernick, guint interactive) { - char **paramlst; + char **paramlst = NULL; gchar *nick, *buffer; const char *bjid, *realjid; const char *rst_msg; @@ -2843,17 +2845,20 @@ time_t rst_time; guint msg_flag = HBB_PREFIX_INFO; - paramlst = split_arg(arg, 1, 0); // nickname - nick = *paramlst; + if (interactive) { + paramlst = split_arg(usernick, 1, 0); // nickname + nick = to_utf8(*paramlst); + } else { + nick = g_strdup(usernick); + } if (!nick || !*nick) { scr_LogPrint(LPRINT_NORMAL, "Please specify a nickname."); - free_arg_lst(paramlst); + if (paramlst) + free_arg_lst(paramlst); return; } - nick = to_utf8(nick); - if (interactive) { // Enter chat mode scr_set_chatmode(TRUE); @@ -2866,7 +2871,8 @@ if (rstatus == offline) { scr_LogPrint(LPRINT_NORMAL, "No such member: %s", nick); - free_arg_lst(paramlst); + if (paramlst) + free_arg_lst(paramlst); g_free(nick); return; } @@ -2912,7 +2918,8 @@ g_free(buffer); g_free(nick); - free_arg_lst(paramlst); + if (paramlst) + free_arg_lst(paramlst); } static void room_bookmark(gpointer bud, char *arg) diff -r 118524e9d7b6 -r 26e437e79e60 mcabber/mcabber/commands.h --- a/mcabber/mcabber/commands.h Sat Feb 12 18:31:31 2011 +0100 +++ b/mcabber/mcabber/commands.h Sat Feb 12 19:00:59 2011 +0100 @@ -27,7 +27,7 @@ void cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata); #endif -void cmd_room_whois(gpointer bud, char *nick_locale, guint interactive); +void cmd_room_whois(gpointer bud, const char *nick, guint interactive); void cmd_room_leave(gpointer bud, char *arg); void cmd_setstatus(const char *recipient, const char *arg); void say_cmd(char *arg, int parse_flags); diff -r 118524e9d7b6 -r 26e437e79e60 mcabber/mcabber/xmpp_muc.c --- a/mcabber/mcabber/xmpp_muc.c Sat Feb 12 18:31:31 2011 +0100 +++ b/mcabber/mcabber/xmpp_muc.c Sat Feb 12 19:00:59 2011 +0100 @@ -617,10 +617,7 @@ autowhois_on : autowhois_off); if (new_member && autowhois == autowhois_on) { - // FIXME: This will fail for some UTF-8 nicknames. - gchar *joiner_nick = from_utf8(rname); - cmd_room_whois(room_elt->data, joiner_nick, FALSE); - g_free(joiner_nick); + cmd_room_whois(room_elt->data, rname, FALSE); } scr_draw_roster();