From a5082a54bdf94b46e6364e3c149cf673cc76807f Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 10 Nov 2012 01:39:42 +0000 Subject: [PATCH] Using vargs in cons_bad_show --- src/jabber.c | 11 ++++++++--- src/profanity.c | 14 ++++---------- src/ui.h | 2 +- src/windows.c | 10 ++++++++-- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index 96e9b9d7..b1b8afd2 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -63,7 +63,7 @@ static void _connection_handler(xmpp_conn_t * const conn, static int _message_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); static int _groupchat_message_handler(xmpp_stanza_t * const stanza); -static int _error_message_handler(xmpp_stanza_t * const stanza); +static int _error_handler(xmpp_stanza_t * const stanza); static int _chat_message_handler(xmpp_stanza_t * const stanza); static int _roster_handler(xmpp_conn_t * const conn, @@ -322,7 +322,7 @@ _message_handler(xmpp_conn_t * const conn, log_error("Message stanza received with no type attribute"); return 1; } else if (strcmp(type, STANZA_TYPE_ERROR) == 0) { - return _error_message_handler(stanza); + return _error_handler(stanza); } else if (strcmp(type, STANZA_TYPE_GROUPCHAT) == 0) { return _groupchat_message_handler(stanza); } else if (strcmp(type, STANZA_TYPE_CHAT) == 0) { @@ -387,7 +387,7 @@ _groupchat_message_handler(xmpp_stanza_t * const stanza) } static int -_error_message_handler(xmpp_stanza_t * const stanza) +_error_handler(xmpp_stanza_t * const stanza) { char *err_msg = NULL; xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR); @@ -647,6 +647,11 @@ _presence_handler(xmpp_conn_t * const conn, char *short_jid = strtok(jid_cpy, "/"); char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); + char *type = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_TYPE); + + if ((type != NULL) && (strcmp(type, STANZA_TYPE_ERROR) == 0)) { + return _error_handler(stanza); + } // handle chat room presence if (room_is_active(from)) { diff --git a/src/profanity.c b/src/profanity.c index 52ddb20a..4e99e25a 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -135,18 +135,12 @@ prof_handle_delayed_message(char *from, char *message, GTimeVal tv_stamp) void prof_handle_error_message(const char *from, const char *err_msg) { - char *msg, *fmt; - if (err_msg != NULL) { - fmt = "Error received from server: %s"; - msg = (char *)malloc(strlen(err_msg) + strlen(fmt) - 1); - if (msg == NULL) - goto loop_out; - sprintf(msg, fmt, err_msg); - cons_bad_show(msg); - free(msg); + cons_bad_show("Error received from server: %s", err_msg); + } else { + cons_bad_show("Unknown error received from server."); } -loop_out: + win_show_error_msg(from, err_msg); } diff --git a/src/ui.h b/src/ui.h index 3875ded8..5a447f35 100644 --- a/src/ui.h +++ b/src/ui.h @@ -126,7 +126,7 @@ void cons_navigation_help(void); void cons_prefs(void); void cons_bad_command(const char * const cmd); void cons_show(const char * const cmd, ...); -void cons_bad_show(const char * const cmd); +void cons_bad_show(const char * const cmd, ...); void cons_highlight_show(const char * const cmd); void cons_show_contacts(GSList * list); void cons_check_version(gboolean not_available_msg); diff --git a/src/windows.c b/src/windows.c index 95445676..c3c6486c 100644 --- a/src/windows.c +++ b/src/windows.c @@ -1000,12 +1000,18 @@ cons_show_contacts(GSList *list) } void -cons_bad_show(const char * const msg) +cons_bad_show(const char * const msg, ...) { + va_list arg; + va_start(arg, msg); + GString *fmt_msg = g_string_new(NULL); + g_string_vprintf(fmt_msg, msg, arg); _win_show_time(_cons_win); wattron(_cons_win, COLOUR_ERR); - wprintw(_cons_win, "%s\n", msg); + wprintw(_cons_win, "%s\n", fmt_msg->str); wattroff(_cons_win, COLOUR_ERR); + g_string_free(fmt_msg, TRUE); + va_end(arg); if (_curr_prof_win == 0) dirty = TRUE;