Fix MUC whois / auto_whois
This patch should fix issue #68:
https://bitbucket.org/McKael/mcabber-crew/issue/68/
--- 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)
--- 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);
--- 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();