about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-11-10 01:39:42 +0000
committerJames Booth <boothj5@gmail.com>2012-11-10 01:39:42 +0000
commita5082a54bdf94b46e6364e3c149cf673cc76807f (patch)
tree99df256e4c1c1234c8e4c1ea6f8a7a10d71e85c6 /src
parent81f92929486e7d37c31686133b7cb6926c2a1f8d (diff)
downloadprofani-tty-a5082a54bdf94b46e6364e3c149cf673cc76807f.tar.gz
Using vargs in cons_bad_show
Diffstat (limited to 'src')
-rw-r--r--src/jabber.c11
-rw-r--r--src/profanity.c14
-rw-r--r--src/ui.h2
-rw-r--r--src/windows.c10
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;