about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command/command.c5
-rw-r--r--src/config/accounts.c4
-rw-r--r--src/log.c19
-rw-r--r--src/profanity.c4
-rw-r--r--src/tools/autocomplete.c3
-rw-r--r--src/tools/parser.c4
6 files changed, 21 insertions, 18 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 18d104bf..bc0976b1 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -1384,6 +1384,7 @@ _cmd_connect(gchar **args, struct cmd_help_t help)
             cons_show("Connecting as %s", jid);
             conn_status = jabber_connect_with_details(jid, passwd, altdomain);
         }
+        g_free(lower);
 
         if (conn_status == JABBER_DISCONNECTED) {
             cons_show_error("Connection attempt for %s failed.", jid);
@@ -2747,6 +2748,7 @@ static gboolean
 _cmd_join(gchar **args, struct cmd_help_t help)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
+    ProfAccount *account = accounts_get_account(jabber_get_account_name());
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
@@ -2771,7 +2773,6 @@ _cmd_join(gchar **args, struct cmd_help_t help)
 
     // server not supplied (room), use account preference
     } else {
-        ProfAccount *account = accounts_get_account(jabber_get_account_name());
         g_string_append(room_str, args[0]);
         g_string_append(room_str, "@");
         g_string_append(room_str, account->muc_service);
@@ -2784,7 +2785,6 @@ _cmd_join(gchar **args, struct cmd_help_t help)
 
     // otherwise use account preference
     } else {
-        ProfAccount *account = accounts_get_account(jabber_get_account_name());
         nick = account->muc_nick;
     }
 
@@ -2800,6 +2800,7 @@ _cmd_join(gchar **args, struct cmd_help_t help)
     jid_destroy(room_jid);
     jid_destroy(my_jid);
     g_string_free(room_str, TRUE);
+    accounts_free_account(account);
 
     return TRUE;
 }
diff --git a/src/config/accounts.c b/src/config/accounts.c
index b903d6be..4eb4b8e3 100644
--- a/src/config/accounts.c
+++ b/src/config/accounts.c
@@ -250,7 +250,7 @@ accounts_get_account(const char * const name)
             g_string_free(g_muc_service, TRUE);
             jid_destroy(jidp);
         } else {
-            account->muc_service = strdup(muc_service);
+            account->muc_service = muc_service;
         }
 
         gchar *muc_nick = g_key_file_get_string(accounts, name, "muc.nick", NULL);
@@ -259,7 +259,7 @@ accounts_get_account(const char * const name)
             account->muc_nick = strdup(jidp->localpart);
             jid_destroy(jidp);
         } else {
-            account->muc_nick = strdup(muc_nick);
+            account->muc_nick = muc_nick;
         }
 
         // get room history
diff --git a/src/log.c b/src/log.c
index 14d801a9..4442dcfd 100644
--- a/src/log.c
+++ b/src/log.c
@@ -214,18 +214,17 @@ void
 chat_log_chat(const gchar * const login, gchar *other,
     const gchar * const msg, chat_log_direction_t direction, GTimeVal *tv_stamp)
 {
-    gchar *other_copy = strdup(other);
-    struct dated_chat_log *dated_log = g_hash_table_lookup(logs, other_copy);
+    struct dated_chat_log *dated_log = g_hash_table_lookup(logs, other);
 
     // no log for user
     if (dated_log == NULL) {
-        dated_log = _create_log(other_copy, login);
-        g_hash_table_insert(logs, other_copy, dated_log);
+        dated_log = _create_log(other, login);
+        g_hash_table_insert(logs, strdup(other), dated_log);
 
     // log exists but needs rolling
     } else if (_log_roll_needed(dated_log)) {
-        dated_log = _create_log(other_copy, login);
-        g_hash_table_replace(logs, other_copy, dated_log);
+        dated_log = _create_log(other, login);
+        g_hash_table_replace(logs, strdup(other), dated_log);
     }
 
     gchar *date_fmt = NULL;
@@ -242,9 +241,9 @@ chat_log_chat(const gchar * const login, gchar *other,
 
     if (direction == PROF_IN_LOG) {
         if (strncmp(msg, "/me ", 4) == 0) {
-            fprintf(logp, "%s - *%s %s\n", date_fmt, other_copy, msg + 4);
+            fprintf(logp, "%s - *%s %s\n", date_fmt, other, msg + 4);
         } else {
-            fprintf(logp, "%s - %s: %s\n", date_fmt, other_copy, msg);
+            fprintf(logp, "%s - %s: %s\n", date_fmt, other, msg);
         }
     } else {
         if (strncmp(msg, "/me ", 4) == 0) {
@@ -413,8 +412,8 @@ _free_chat_log(struct dated_chat_log *dated_log)
             g_date_time_unref(dated_log->date);
             dated_log->date = NULL;
         }
+        free(dated_log);
     }
-    dated_log = NULL;
 }
 
 static
@@ -450,6 +449,7 @@ _get_log_filename(const char * const other, const char * const login,
 
     gchar *date = g_date_time_format(dt, "/%Y_%m_%d.log");
     g_string_append(log_file, date);
+    g_free(date);
 
     char *result = strdup(log_file->str);
     g_string_free(log_file, TRUE);
@@ -486,6 +486,7 @@ _get_groupchat_log_filename(const char * const room, const char * const login,
 
     gchar *date = g_date_time_format(dt, "/%Y_%m_%d.log");
     g_string_append(log_file, date);
+    g_free(date);
 
     char *result = strdup(log_file->str);
     g_string_free(log_file, TRUE);
diff --git a/src/profanity.c b/src/profanity.c
index 5ecd2974..6ea7ff79 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -198,7 +198,9 @@ prof_handle_error_message(const char *from, const char *err_msg)
         }
         // remove the room from muc
         Jid *room_jid = jid_create(from);
-        muc_leave_room(room_jid->barejid);
+        if (!muc_get_roster_received(room_jid->barejid)) {
+            muc_leave_room(room_jid->barejid);
+        }
         jid_destroy(room_jid);
 
     } else {
diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c
index 77d8c7ae..438b48b7 100644
--- a/src/tools/autocomplete.c
+++ b/src/tools/autocomplete.c
@@ -176,7 +176,7 @@ autocomplete_param_with_func(char *input, int *size, char *command,
     char *auto_msg = NULL;
     char inp_cpy[*size];
     int i;
-    char *command_cpy = malloc(strlen(command) + 2);
+    char command_cpy[strlen(command) + 2];
     sprintf(command_cpy, "%s ", command);
     int len = strlen(command_cpy);
     if ((strncmp(input, command_cpy, len) == 0) && (*size > len)) {
@@ -192,7 +192,6 @@ autocomplete_param_with_func(char *input, int *size, char *command,
             free(found);
         }
     }
-    free(command_cpy);
 
     return auto_msg;
 }
diff --git a/src/tools/parser.c b/src/tools/parser.c
index f273923a..1ec539df 100644
--- a/src/tools/parser.c
+++ b/src/tools/parser.c
@@ -260,12 +260,13 @@ parse_args_with_freetext(const char * const inp, int min, int max)
         tokens = g_slist_append(tokens, g_strndup(token_start, token_size));
     }
 
+    free(copy);
+
     int num = g_slist_length(tokens) - 1;
 
     // if num args not valid return NULL
     if ((num < min) || (num > max)) {
         g_slist_free_full(tokens, free);
-        free(copy);
         return NULL;
 
     // if min allowed is 0 and 0 found, return empty char* array
@@ -288,7 +289,6 @@ parse_args_with_freetext(const char * const inp, int min, int max)
 
         args[arg_count] = NULL;
         g_slist_free_full(tokens, free);
-        free(copy);
 
         return args;
     }