about summary refs log tree commit diff stats
path: root/src/command
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-07-31 19:32:58 +0100
committerJames Booth <boothj5@gmail.com>2013-07-31 19:32:58 +0100
commit51b2137705b99ad45a8d4d646da9f3f8e2b3b4db (patch)
treed59284c75c94c2bdf029aabd1591593ef8f02f77 /src/command
parent992ee280916f4218b4eefb87bc5a53b27e1cc47b (diff)
parent7b37f2ace7536ae12f1726819cb0b6224232361c (diff)
downloadprofani-tty-51b2137705b99ad45a8d4d646da9f3f8e2b3b4db.tar.gz
Merge remote-tracking branch 'dmitry/memleaks' into nextdev
Diffstat (limited to 'src/command')
-rw-r--r--src/command/command.c59
1 files changed, 41 insertions, 18 deletions
diff --git a/src/command/command.c b/src/command/command.c
index e6882553..45086e18 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -1142,7 +1142,6 @@ cmd_execute_default(const char * const inp)
                 ui_current_print_line("You are not currently connected.");
             } else {
                 message_send_groupchat(inp, recipient);
-                free(recipient);
             }
             break;
 
@@ -1160,7 +1159,6 @@ cmd_execute_default(const char * const inp)
                 }
 
                 ui_outgoing_msg("me", recipient, inp);
-                free(recipient);
             }
             break;
 
@@ -1170,7 +1168,6 @@ cmd_execute_default(const char * const inp)
             } else {
                 message_send(inp, recipient);
                 ui_outgoing_msg("me", recipient, inp);
-                free(recipient);
             }
             break;
 
@@ -1184,7 +1181,6 @@ cmd_execute_default(const char * const inp)
             } else {
                 message_send_duck(inp);
                 ui_duck(inp);
-                free(recipient);
             }
             break;
 
@@ -1192,6 +1188,8 @@ cmd_execute_default(const char * const inp)
             break;
     }
 
+    free(recipient);
+
     return TRUE;
 }
 
@@ -1218,7 +1216,9 @@ _cmd_complete_parameters(char *input, int *size)
 
     // autocomplete nickname in chat rooms
     if (ui_current_win_type() == WIN_MUC) {
-        Autocomplete nick_ac = muc_get_roster_ac(ui_current_recipient());
+        char *recipient = ui_current_recipient();
+        Autocomplete nick_ac = muc_get_roster_ac(recipient);
+        free(recipient);
         if (nick_ac != NULL) {
             gchar *nick_choices[] = { "/msg", "/info", "/caps", "/status", "/software" } ;
 
@@ -2008,6 +2008,8 @@ _cmd_who(gchar **args, struct cmd_help_t help)
                     ui_room_roster(room, filtered, presence);
                 }
 
+                free(room);
+
             // not in groupchat window
             } else {
                 cons_show("");
@@ -2172,6 +2174,8 @@ _cmd_msg(gchar **args, struct cmd_help_t help)
             ui_current_print_line("No such participant \"%s\" in room.", usr);
         }
 
+        free(room_name);
+
         return TRUE;
 
     } else {
@@ -2493,17 +2497,20 @@ _cmd_info(gchar **args, struct cmd_help_t help)
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
     PContact pcontact = NULL;
+    char *recipient;
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
         return TRUE;
     }
 
+    recipient = ui_current_recipient();
+
     switch (win_type)
     {
         case WIN_MUC:
             if (usr != NULL) {
-                pcontact = muc_get_participant(ui_current_recipient(), usr);
+                pcontact = muc_get_participant(recipient, usr);
                 if (pcontact != NULL) {
                     cons_show_info(pcontact);
                 } else {
@@ -2517,11 +2524,11 @@ _cmd_info(gchar **args, struct cmd_help_t help)
             if (usr != NULL) {
                 cons_show("No parameter required for /info in chat.");
             } else {
-                pcontact = roster_get_contact(ui_current_recipient());
+                pcontact = roster_get_contact(recipient);
                 if (pcontact != NULL) {
                     cons_show_info(pcontact);
                 } else {
-                    cons_show("No such contact \"%s\" in roster.", ui_current_recipient());
+                    cons_show("No such contact \"%s\" in roster.", recipient);
                 }
             }
             break;
@@ -2529,7 +2536,7 @@ _cmd_info(gchar **args, struct cmd_help_t help)
             if (usr != NULL) {
                 ui_current_print_line("No parameter required when in chat.");
             } else {
-                Jid *jid = jid_create(ui_current_recipient());
+                Jid *jid = jid_create(recipient);
                 pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
                 if (pcontact != NULL) {
                     cons_show_info(pcontact);
@@ -2559,6 +2566,8 @@ _cmd_info(gchar **args, struct cmd_help_t help)
             break;
     }
 
+    free(recipient);
+
     return TRUE;
 }
 
@@ -2568,6 +2577,7 @@ _cmd_caps(gchar **args, struct cmd_help_t help)
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
     PContact pcontact = NULL;
+    char *recipient;
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
@@ -2578,13 +2588,15 @@ _cmd_caps(gchar **args, struct cmd_help_t help)
     {
         case WIN_MUC:
             if (args[0] != NULL) {
-                pcontact = muc_get_participant(ui_current_recipient(), args[0]);
+                recipient = ui_current_recipient();
+                pcontact = muc_get_participant(recipient, args[0]);
                 if (pcontact != NULL) {
                     Resource *resource = p_contact_get_resource(pcontact, args[0]);
                     cons_show_caps(args[0], resource);
                 } else {
                     cons_show("No such participant \"%s\" in room.", args[0]);
                 }
+                free(recipient);
             } else {
                 cons_show("No nickname supplied to /caps in chat room.");
             }
@@ -2617,10 +2629,15 @@ _cmd_caps(gchar **args, struct cmd_help_t help)
             if (args[0] != NULL) {
                 cons_show("No parameter needed to /caps when in private chat.");
             } else {
-                Jid *jid = jid_create(ui_current_recipient());
-                pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
-                Resource *resource = p_contact_get_resource(pcontact, jid->resourcepart);
-                cons_show_caps(jid->resourcepart, resource);
+                recipient = ui_current_recipient();
+                Jid *jid = jid_create(recipient);
+                if (jid) {
+                    pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
+                    Resource *resource = p_contact_get_resource(pcontact, jid->resourcepart);
+                    cons_show_caps(jid->resourcepart, resource);
+                    jid_destroy(jid);
+                }
+                free(recipient);
             }
             break;
         default:
@@ -2637,6 +2654,7 @@ _cmd_software(gchar **args, struct cmd_help_t help)
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
     PContact pcontact = NULL;
+    char *recipient;
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
@@ -2647,14 +2665,16 @@ _cmd_software(gchar **args, struct cmd_help_t help)
     {
         case WIN_MUC:
             if (args[0] != NULL) {
-                pcontact = muc_get_participant(ui_current_recipient(), args[0]);
+                recipient = ui_current_recipient();
+                pcontact = muc_get_participant(recipient, args[0]);
                 if (pcontact != NULL) {
-                    Jid *jid = jid_create_from_bare_and_resource(ui_current_recipient(), args[0]);
+                    Jid *jid = jid_create_from_bare_and_resource(recipient, args[0]);
                     iq_send_software_version(jid->fulljid);
                     jid_destroy(jid);
                 } else {
                     cons_show("No such participant \"%s\" in room.", args[0]);
                 }
+                free(recipient);
             } else {
                 cons_show("No nickname supplied to /software in chat room.");
             }
@@ -2664,11 +2684,12 @@ _cmd_software(gchar **args, struct cmd_help_t help)
             if (args[0] != NULL) {
                 Jid *jid = jid_create(args[0]);
 
-                if (jid->fulljid == NULL) {
+                if (jid == NULL || jid->fulljid == NULL) {
                     cons_show("You must provide a full jid to the /software command.");
                 } else {
                     iq_send_software_version(jid->fulljid);
                 }
+                jid_destroy(jid);
             } else {
                 cons_show("You must provide a jid to the /software command.");
             }
@@ -2677,7 +2698,9 @@ _cmd_software(gchar **args, struct cmd_help_t help)
             if (args[0] != NULL) {
                 cons_show("No parameter needed to /software when in private chat.");
             } else {
-                iq_send_software_version(ui_current_recipient());
+                recipient = ui_current_recipient();
+                iq_send_software_version(recipient);
+                free(recipient);
             }
             break;
         default: