diff --git a/src/chat.c b/src/chat.c index 6ee7990..5ffeb1f 100644 --- a/src/chat.c +++ b/src/chat.c @@ -114,15 +114,11 @@ static void chat_set_window_name(ToxWindow *self, char *nick, int len) snprintf(self->name, sizeof(self->name), "%s", nick); } -void kill_chat_window(ToxWindow *self, Tox *m) +void kill_chat_window(ToxWindow *self) { - set_active_window(0); ChatContext *ctx = self->chatwin; StatusBar *statusbar = self->stb; - if (ctx->self_is_typing) - set_typingstatus(self, m, 0); - log_disable(ctx->log); line_info_cleanup(ctx->hst); @@ -130,21 +126,17 @@ void kill_chat_window(ToxWindow *self, Tox *m) stop_current_call(self); #endif - int f_num = self->num; - delwin(ctx->linewin); delwin(ctx->history); - delwin(self->window); delwin(statusbar->topline); - - del_window(self); - disable_chatwin(f_num); - + free(ctx->log); free(ctx->hst); free(ctx); free(self->help); free(statusbar); + + disable_chatwin(self->num); del_window(self); } @@ -716,7 +708,7 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr) if (line[0] == '/') { if (strcmp(line, "/close") == 0) { - kill_chat_window(self, m); + kill_chat_window(self); return; } else if (strncmp(line, "/me ", strlen("/me ")) == 0) { send_action(self, ctx, m, line + strlen("/me ")); diff --git a/src/groupchat.c b/src/groupchat.c index 49cf602..51b7d19 100644 --- a/src/groupchat.c +++ b/src/groupchat.c @@ -93,7 +93,6 @@ void kill_groupchat_window(ToxWindow *self) delwin(ctx->linewin); delwin(ctx->history); delwin(ctx->sidebar); - delwin(self->window); free(ctx->log); free(ctx->hst); free(ctx); @@ -103,7 +102,6 @@ void kill_groupchat_window(ToxWindow *self) static void close_groupchat(ToxWindow *self, Tox *m, int groupnum) { - set_active_window(0); tox_del_groupchat(m, groupnum); free(groupchats[groupnum].peer_names); diff --git a/src/line_info.c b/src/line_info.c index 8eb43f9..4e7fb40 100644 --- a/src/line_info.c +++ b/src/line_info.c @@ -80,6 +80,13 @@ void line_info_cleanup(struct history *hst) free(tmp1); tmp1 = tmp2; } + + int i; + + for (i = 0; i < hst->queue_sz; ++i) { + if (hst->queue[i]) + free(hst->queue[i]); + } } /* moves root forward and frees previous root */ diff --git a/src/misc_tools.c b/src/misc_tools.c index 13c7fb8..49fcd47 100644 --- a/src/misc_tools.c +++ b/src/misc_tools.c @@ -213,7 +213,7 @@ void get_file_name(char *namebuf, const char *pathname) filename = tmpname; } - snprintf(namebuf, MAX_STR_SIZE, "%s", filename); + snprintf(namebuf, sizeof(namebuf), "%s", filename); } /* converts str to all lowercase */ diff --git a/src/prompt.c b/src/prompt.c index 97b8858..f8ecf02 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -69,6 +69,26 @@ const char glob_cmd_list[AC_NUM_GLOB_COMMANDS][MAX_CMDNAME_SIZE] = { #endif /* _SUPPORT_AUDIO */ }; +void kill_prompt_window(ToxWindow *self) { + ChatContext *ctx = self->chatwin; + StatusBar *statusbar = self->stb; + + log_disable(ctx->log); + line_info_cleanup(ctx->hst); + + delwin(ctx->linewin); + delwin(ctx->history); + delwin(statusbar->topline); + + free(ctx->log); + free(ctx->hst); + free(ctx); + free(self->help); + free(statusbar); + + del_window(self); +} + /* Updates own nick in prompt statusbar */ void prompt_update_nick(ToxWindow *prompt, char *nick) { @@ -348,7 +368,7 @@ void prompt_init_statusbar(ToxWindow *self, Tox *m) const char *toxic_ver = strtok(ver, "_"); if ( (!strcmp("Online", statusmsg) || !strncmp("Toxing on Toxic", statusmsg, 15)) && toxic_ver != NULL) { - snprintf(statusmsg, MAX_STR_SIZE, "Toxing on Toxic v.%s", toxic_ver); + snprintf(statusmsg, sizeof(statusmsg), "Toxing on Toxic v.%s", toxic_ver); s_len = strlen(statusmsg); statusmsg[s_len] = '\0'; } diff --git a/src/prompt.h b/src/prompt.h index 71ef722..93de1e5 100644 --- a/src/prompt.h +++ b/src/prompt.h @@ -39,5 +39,6 @@ void prompt_update_nick(ToxWindow *prompt, char *nick); void prompt_update_statusmessage(ToxWindow *prompt, char *statusmsg); void prompt_update_status(ToxWindow *prompt, uint8_t status); void prompt_update_connectionstatus(ToxWindow *prompt, bool is_connected); +void kill_prompt_window(ToxWindow *self); #endif /* end of include guard: PROMPT_H_UZYGWFFL */ diff --git a/src/toxic.c b/src/toxic.c index d1be879..1843d47 100644 --- a/src/toxic.c +++ b/src/toxic.c @@ -96,15 +96,10 @@ void exit_toxic_success(Tox *m) store_data(m, DATA_FILE); close_all_file_senders(m); kill_all_windows(); - log_disable(prompt->chatwin->log); - line_info_cleanup(prompt->chatwin->hst); + free(DATA_FILE); - free(prompt->stb); - free(prompt->help); - free(prompt->chatwin->log); - free(prompt->chatwin->hst); - free(prompt->chatwin); free(user_settings); + #ifdef _SUPPORT_AUDIO terminate_audio(); #endif /* _SUPPORT_AUDIO */ diff --git a/src/windows.c b/src/windows.c index 43e52c1..b7b9c10 100644 --- a/src/windows.c +++ b/src/windows.c @@ -254,17 +254,12 @@ int add_window(Tox *m, ToxWindow w) return -1; } -/* Deletes window w and cleans up */ -void del_window(ToxWindow *w) +void set_active_window(int index) { - active_window = windows; /* Go to prompt screen */ + if (index < 0 || index >= MAX_WINDOWS_NUM) + return; - delwin(w->window); - memset(w, 0, sizeof(ToxWindow)); - - clear(); - refresh(); - --num_active_windows; + active_window = windows + index; } /* Shows next window when tab or back-tab is pressed */ @@ -288,12 +283,17 @@ void set_next_window(int ch) } } -void set_active_window(int index) +/* Deletes window w and cleans up */ +void del_window(ToxWindow *w) { - if (index < 0 || index >= MAX_WINDOWS_NUM) - return; + set_active_window(0); /* Go to prompt screen */ - active_window = windows + index; + delwin(w->window); + memset(w, 0, sizeof(ToxWindow)); + + clear(); + refresh(); + --num_active_windows; } ToxWindow *init_windows(Tox *m) @@ -497,6 +497,8 @@ int get_num_active_windows(void) /* destroys all chat and groupchat windows (should only be called on shutdown) */ void kill_all_windows(void) { + kill_prompt_window(prompt); + int i; for (i = 0; i < MAX_WINDOWS_NUM; ++i) {