xfree is not particularly helpful, remove it. From Thomas Adam.

This commit is contained in:
Nicholas Marriott 2012-07-10 11:53:01 +00:00
parent a3391692ad
commit df912e3540
73 changed files with 329 additions and 360 deletions

View File

@ -69,15 +69,14 @@ args_parse(const char *template, int argc, char **argv)
if (opt < 0 || opt >= SCHAR_MAX) if (opt < 0 || opt >= SCHAR_MAX)
continue; continue;
if (opt == '?' || (ptr = strchr(template, opt)) == NULL) { if (opt == '?' || (ptr = strchr(template, opt)) == NULL) {
xfree(args->flags); free(args->flags);
xfree(args); free(args);
return (NULL); return (NULL);
} }
bit_set(args->flags, opt); bit_set(args->flags, opt);
if (ptr[1] == ':') { if (ptr[1] == ':') {
if (args->values[opt] != NULL) free(args->values[opt]);
xfree(args->values[opt]);
args->values[opt] = xstrdup(optarg); args->values[opt] = xstrdup(optarg);
} }
} }
@ -98,13 +97,11 @@ args_free(struct args *args)
cmd_free_argv(args->argc, args->argv); cmd_free_argv(args->argc, args->argv);
for (i = 0; i < SCHAR_MAX; i++) { for (i = 0; i < SCHAR_MAX; i++)
if (args->values[i] != NULL) free(args->values[i]);
xfree(args->values[i]);
}
xfree(args->flags); free(args->flags);
xfree(args); free(args);
} }
/* Print a set of arguments. */ /* Print a set of arguments. */
@ -183,8 +180,7 @@ args_has(struct args *args, u_char ch)
void void
args_set(struct args *args, u_char ch, const char *value) args_set(struct args *args, u_char ch, const char *value)
{ {
if (args->values[ch] != NULL) free(args->values[ch]);
xfree(args->values[ch]);
if (value != NULL) if (value != NULL)
args->values[ch] = xstrdup(value); args->values[ch] = xstrdup(value);
else else

View File

@ -109,13 +109,12 @@
} while (0) } while (0)
#define ARRAY_FREE(a) do { \ #define ARRAY_FREE(a) do { \
if ((a)->list != NULL) \ free((a)->list); \
xfree((a)->list); \
ARRAY_INIT(a); \ ARRAY_INIT(a); \
} while (0) } while (0)
#define ARRAY_FREEALL(a) do { \ #define ARRAY_FREEALL(a) do { \
ARRAY_FREE(a); \ ARRAY_FREE(a); \
xfree(a); \ free(a); \
} while (0) } while (0)
#endif #endif

11
cfg.c
View File

@ -21,6 +21,7 @@
#include <errno.h> #include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -117,14 +118,14 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
line = NULL; line = NULL;
if (cmd_string_parse(buf, &cmdlist, &cause) != 0) { if (cmd_string_parse(buf, &cmdlist, &cause) != 0) {
xfree(buf); free(buf);
if (cause == NULL) if (cause == NULL)
continue; continue;
cfg_add_cause(causes, "%s: %u: %s", path, n, cause); cfg_add_cause(causes, "%s: %u: %s", path, n, cause);
xfree(cause); free(cause);
continue; continue;
} else } else
xfree(buf); free(buf);
if (cmdlist == NULL) if (cmdlist == NULL)
continue; continue;
cfg_cause = NULL; cfg_cause = NULL;
@ -150,13 +151,13 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
if (cfg_cause != NULL) { if (cfg_cause != NULL) {
cfg_add_cause( cfg_add_cause(
causes, "%s: %d: %s", path, n, cfg_cause); causes, "%s: %d: %s", path, n, cfg_cause);
xfree(cfg_cause); free(cfg_cause);
} }
} }
if (line != NULL) { if (line != NULL) {
cfg_add_cause(causes, cfg_add_cause(causes,
"%s: %d: line continuation at end of file", path, n); "%s: %d: line continuation at end of file", path, n);
xfree(line); free(line);
} }
fclose(f); fclose(f);

View File

@ -122,7 +122,7 @@ retry:
if (unlink(path) != 0 && errno != ENOENT) if (unlink(path) != 0 && errno != ENOENT)
return (-1); return (-1);
fd = server_start(lockfd, lockfile); fd = server_start(lockfd, lockfile);
xfree(lockfile); free(lockfile);
close(lockfd); close(lockfd);
} }

View File

@ -18,6 +18,8 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include "tmux.h" #include "tmux.h"
/* /*
@ -81,7 +83,7 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx)
} else { } else {
if (server_client_open(ctx->cmdclient, s, &cause) != 0) { if (server_client_open(ctx->cmdclient, s, &cause) != 0) {
ctx->error(ctx, "open terminal failed: %s", cause); ctx->error(ctx, "open terminal failed: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -74,7 +75,7 @@ cmd_bind_key_exec(struct cmd *self, struct cmd_ctx *ctx)
cmdlist = cmd_list_parse(args->argc - 1, args->argv + 1, &cause); cmdlist = cmd_list_parse(args->argc - 1, args->argv + 1, &cause);
if (cmdlist == NULL) { if (cmdlist == NULL) {
ctx->error(ctx, "%s", cause); ctx->error(ctx, "%s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }

View File

@ -81,7 +81,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
w->active = wp; w->active = wp;
name = default_window_name(w); name = default_window_name(w);
window_set_name(w, name); window_set_name(w, name);
xfree(name); free(name);
layout_init(w); layout_init(w);
base_idx = options_get_number(&s->options, "base-index"); base_idx = options_get_number(&s->options, "base-index");
@ -106,7 +106,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
cp = format_expand(ft, template); cp = format_expand(ft, template);
ctx->print(ctx, "%s", cp); ctx->print(ctx, "%s", cp);
xfree(cp); free(cp);
format_free(ft); format_free(ft);
} }

View File

@ -62,7 +62,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
n = args_strtonum(args, 'S', INT_MIN, SHRT_MAX, &cause); n = args_strtonum(args, 'S', INT_MIN, SHRT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
top = gd->hsize; top = gd->hsize;
xfree(cause); free(cause);
} else if (n < 0 && (u_int) -n > gd->hsize) } else if (n < 0 && (u_int) -n > gd->hsize)
top = 0; top = 0;
else else
@ -73,7 +73,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
n = args_strtonum(args, 'E', INT_MIN, SHRT_MAX, &cause); n = args_strtonum(args, 'E', INT_MIN, SHRT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
bottom = gd->hsize + gd->sy - 1; bottom = gd->hsize + gd->sy - 1;
xfree(cause); free(cause);
} else if (n < 0 && (u_int) -n > gd->hsize) } else if (n < 0 && (u_int) -n > gd->hsize)
bottom = 0; bottom = 0;
else else
@ -96,7 +96,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
len += linelen; len += linelen;
buf[len++] = '\n'; buf[len++] = '\n';
xfree(line); free(line);
} }
limit = options_get_number(&global_options, "buffer-limit"); limit = options_get_number(&global_options, "buffer-limit");
@ -109,14 +109,14 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(buf); free(buf);
xfree(cause); free(cause);
return (-1); return (-1);
} }
if (paste_replace(&global_buffers, buffer, buf, len) != 0) { if (paste_replace(&global_buffers, buffer, buf, len) != 0) {
ctx->error(ctx, "no buffer %d", buffer); ctx->error(ctx, "no buffer %d", buffer);
xfree(buf); free(buf);
return (-1); return (-1);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include "tmux.h" #include "tmux.h"
@ -86,11 +87,11 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
xasprintf(&action_data, "%u", idx - 1); xasprintf(&action_data, "%u", idx - 1);
cdata->command = cmd_template_replace(action, action_data, 1); cdata->command = cmd_template_replace(action, action_data, 1);
xfree(action_data); free(action_data);
window_choose_add(wl->window->active, cdata); window_choose_add(wl->window->active, cdata);
} }
xfree(action); free(action);
window_choose_ready(wl->window->active, window_choose_ready(wl->window->active,
0, cmd_choose_buffer_callback, cmd_choose_buffer_free); 0, cmd_choose_buffer_callback, cmd_choose_buffer_free);
@ -119,7 +120,7 @@ cmd_choose_buffer_free(struct window_choose_data *data)
cdata->client->references--; cdata->client->references--;
xfree(cdata->command); free(cdata->command);
xfree(cdata->ft_template); free(cdata->ft_template);
xfree(cdata); free(cdata);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include "tmux.h" #include "tmux.h"
@ -98,7 +99,7 @@ cmd_choose_client_exec(struct cmd *self, struct cmd_ctx *ctx)
window_choose_add(wl->window->active, cdata); window_choose_add(wl->window->active, cdata);
} }
xfree(action); free(action);
window_choose_ready(wl->window->active, window_choose_ready(wl->window->active,
cur, cmd_choose_client_callback, cmd_choose_client_free); cur, cmd_choose_client_callback, cmd_choose_client_free);
@ -133,8 +134,8 @@ cmd_choose_client_free(struct window_choose_data *cdata)
cdata->client->references--; cdata->client->references--;
xfree(cdata->ft_template); free(cdata->ft_template);
xfree(cdata->command); free(cdata->command);
format_free(cdata->ft); format_free(cdata->ft);
xfree(cdata); free(cdata);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
@ -206,7 +207,7 @@ windows_only:
ctx, s2, wm, final_win_template, ctx, s2, wm, final_win_template,
final_win_action, idx_ses); final_win_action, idx_ses);
xfree(final_win_action); free(final_win_action);
} }
/* /*
* If we're just drawing windows, don't consider moving on to * If we're just drawing windows, don't consider moving on to
@ -215,8 +216,7 @@ windows_only:
if (wflag && !sflag) if (wflag && !sflag)
break; break;
} }
if (final_win_template != NULL) free(final_win_template);
xfree(final_win_template);
window_choose_ready(wl->window->active, cur_win, window_choose_ready(wl->window->active, cur_win,
cmd_choose_tree_callback, cmd_choose_tree_free); cmd_choose_tree_callback, cmd_choose_tree_free);
@ -242,10 +242,10 @@ cmd_choose_tree_free(struct window_choose_data *cdata)
cdata->session->references--; cdata->session->references--;
cdata->client->references--; cdata->client->references--;
xfree(cdata->ft_template); free(cdata->ft_template);
xfree(cdata->command); free(cdata->command);
format_free(cdata->ft); format_free(cdata->ft);
xfree(cdata); free(cdata);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
@ -138,7 +139,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx)
status_prompt_set(c, prompt, input, cmd_command_prompt_callback, status_prompt_set(c, prompt, input, cmd_command_prompt_callback,
cmd_command_prompt_free, cdata, 0); cmd_command_prompt_free, cdata, 0);
xfree(prompt); free(prompt);
return (0); return (0);
} }
@ -157,7 +158,7 @@ cmd_command_prompt_callback(void *data, const char *s)
return (0); return (0);
new_template = cmd_template_replace(cdata->template, s, cdata->idx); new_template = cmd_template_replace(cdata->template, s, cdata->idx);
xfree(cdata->template); free(cdata->template);
cdata->template = new_template; cdata->template = new_template;
/* /*
@ -169,7 +170,7 @@ cmd_command_prompt_callback(void *data, const char *s)
input = strsep(&cdata->next_input, ","); input = strsep(&cdata->next_input, ",");
status_prompt_update(c, prompt, input); status_prompt_update(c, prompt, input);
xfree(prompt); free(prompt);
cdata->idx++; cdata->idx++;
return (1); return (1);
} }
@ -178,7 +179,7 @@ cmd_command_prompt_callback(void *data, const char *s)
if (cause != NULL) { if (cause != NULL) {
*cause = toupper((u_char) *cause); *cause = toupper((u_char) *cause);
status_message_set(c, "%s", cause); status_message_set(c, "%s", cause);
xfree(cause); free(cause);
} }
return (0); return (0);
} }
@ -205,11 +206,8 @@ cmd_command_prompt_free(void *data)
{ {
struct cmd_command_prompt_cdata *cdata = data; struct cmd_command_prompt_cdata *cdata = data;
if (cdata->inputs != NULL) free(cdata->inputs);
xfree(cdata->inputs); free(cdata->prompts);
if (cdata->prompts != NULL) free(cdata->template);
xfree(cdata->prompts); free(cdata);
if (cdata->template != NULL)
xfree(cdata->template);
xfree(cdata);
} }

View File

@ -17,6 +17,7 @@
*/ */
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -87,7 +88,7 @@ cmd_confirm_before_exec(struct cmd *self, struct cmd_ctx *ctx)
ptr = copy = xstrdup(args->argv[0]); ptr = copy = xstrdup(args->argv[0]);
cmd = strsep(&ptr, " \t"); cmd = strsep(&ptr, " \t");
xasprintf(&new_prompt, "Confirm '%s'? (y/n) ", cmd); xasprintf(&new_prompt, "Confirm '%s'? (y/n) ", cmd);
xfree(copy); free(copy);
} }
cdata = xmalloc(sizeof *cdata); cdata = xmalloc(sizeof *cdata);
@ -97,7 +98,7 @@ cmd_confirm_before_exec(struct cmd *self, struct cmd_ctx *ctx)
cmd_confirm_before_callback, cmd_confirm_before_free, cdata, cmd_confirm_before_callback, cmd_confirm_before_free, cdata,
PROMPT_SINGLE); PROMPT_SINGLE);
xfree(new_prompt); free(new_prompt);
return (1); return (1);
} }
@ -119,7 +120,7 @@ cmd_confirm_before_callback(void *data, const char *s)
if (cause != NULL) { if (cause != NULL) {
*cause = toupper((u_char) *cause); *cause = toupper((u_char) *cause);
status_message_set(c, "%s", cause); status_message_set(c, "%s", cause);
xfree(cause); free(cause);
} }
return (0); return (0);
} }
@ -144,7 +145,6 @@ cmd_confirm_before_free(void *data)
{ {
struct cmd_confirm_before_data *cdata = data; struct cmd_confirm_before_data *cdata = data;
if (cdata->cmd != NULL) free(cdata->cmd);
xfree(cdata->cmd); free(cdata);
xfree(cdata);
} }

View File

@ -53,7 +53,7 @@ cmd_delete_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <time.h> #include <time.h>
#include "tmux.h" #include "tmux.h"
@ -93,7 +94,7 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx)
else else
status_message_set(c, "%s", msg); status_message_set(c, "%s", msg);
xfree(msg); free(msg);
format_free(ft); format_free(ft);
return (0); return (0);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <fnmatch.h> #include <fnmatch.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -134,7 +135,7 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
xasprintf(&sctx, xasprintf(&sctx,
"pane %u line %u: \"%s\"", i - 1, "pane %u line %u: \"%s\"", i - 1,
line + 1, sres); line + 1, sres);
xfree(sres); free(sres);
} }
} }
@ -143,7 +144,7 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
break; break;
} }
} }
xfree(searchstr); free(searchstr);
if (ARRAY_LENGTH(&list_idx) == 0) { if (ARRAY_LENGTH(&list_idx) == 0) {
ctx->error(ctx, "no windows matching: %s", str); ctx->error(ctx, "no windows matching: %s", str);
@ -217,7 +218,7 @@ cmd_find_window_free(struct window_choose_data *cdata)
cdata->session->references--; cdata->session->references--;
xfree(cdata->ft_template); free(cdata->ft_template);
format_free(cdata->ft); format_free(cdata->ft);
xfree(cdata); free(cdata);
} }

View File

@ -20,6 +20,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -91,7 +92,7 @@ cmd_if_shell_callback(struct job *job)
if (cmd_string_parse(cmd, &cmdlist, &cause) != 0) { if (cmd_string_parse(cmd, &cmdlist, &cause) != 0) {
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "%s", cause); ctx->error(ctx, "%s", cause);
xfree(cause); free(cause);
} }
return; return;
} }
@ -115,8 +116,7 @@ cmd_if_shell_free(void *data)
if (ctx->curclient != NULL) if (ctx->curclient != NULL)
ctx->curclient->references--; ctx->curclient->references--;
if (cdata->cmd_else != NULL) free(cdata->cmd_else);
xfree(cdata->cmd_else); free(cdata->cmd_if);
xfree(cdata->cmd_if); free(cdata);
xfree(cdata);
} }

View File

@ -116,14 +116,14 @@ join_pane(struct cmd *self, struct cmd_ctx *ctx, int not_same_window)
size = args_strtonum(args, 'l', 0, INT_MAX, &cause); size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "size %s", cause); ctx->error(ctx, "size %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
} else if (args_has(args, 'p')) { } else if (args_has(args, 'p')) {
percentage = args_strtonum(args, 'p', 0, 100, &cause); percentage = args_strtonum(args, 'p', 0, 100, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "percentage %s", cause); ctx->error(ctx, "percentage %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
if (type == LAYOUT_TOPBOTTOM) if (type == LAYOUT_TOPBOTTOM)

View File

@ -56,7 +56,7 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx)
dflag = args_has(self->args, 'd'); dflag = args_has(self->args, 'd');
if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) { if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) {
ctx->error(ctx, "can't link window: %s", cause); ctx->error(ctx, "can't link window: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
recalculate_sizes(); recalculate_sizes();

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -60,7 +61,7 @@ cmd_list_buffers_exec(unused struct cmd *self, struct cmd_ctx *ctx)
line = format_expand(ft, template); line = format_expand(ft, template);
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
xfree(line); free(line);
format_free(ft); format_free(ft);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
@ -76,7 +77,7 @@ cmd_list_clients_exec(struct cmd *self, struct cmd_ctx *ctx)
line = format_expand(ft, template); line = format_expand(ft, template);
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
xfree(line); free(line);
format_free(ft); format_free(ft);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -135,7 +136,7 @@ cmd_list_panes_window(struct cmd *self,
line = format_expand(ft, template); line = format_expand(ft, template);
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
xfree(line); free(line);
format_free(ft); format_free(ft);
n++; n++;

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
@ -60,7 +61,7 @@ cmd_list_sessions_exec(struct cmd *self, struct cmd_ctx *ctx)
line = format_expand(ft, template); line = format_expand(ft, template);
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
xfree(line); free(line);
format_free(ft); format_free(ft);
n++; n++;

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -103,7 +104,7 @@ cmd_list_windows_session(
line = format_expand(ft, template); line = format_expand(ft, template);
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
xfree(line); free(line);
format_free(ft); format_free(ft);
n++; n++;

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -139,7 +140,7 @@ cmd_list_free(struct cmd_list *cmdlist)
TAILQ_REMOVE(&cmdlist->list, cmd, qentry); TAILQ_REMOVE(&cmdlist->list, cmd, qentry);
cmd_free(cmd); cmd_free(cmd);
} }
xfree(cmdlist); free(cmdlist);
} }
size_t size_t

View File

@ -62,7 +62,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
} }
@ -76,7 +76,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer_ptr, &cause); buffer_ptr, &cause);
if (error != 0) { if (error != 0) {
ctx->error(ctx, "%s: %s", path, cause); ctx->error(ctx, "%s: %s", path, cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
return (1); return (1);
@ -127,15 +127,14 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
} }
if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) { if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) {
ctx->error(ctx, "no buffer %d", buffer); ctx->error(ctx, "no buffer %d", buffer);
xfree(pdata); free(pdata);
return (-1); return (-1);
} }
return (0); return (0);
error: error:
if (pdata != NULL) free(pdata);
xfree(pdata);
if (f != NULL) if (f != NULL)
fclose(f); fclose(f);
return (-1); return (-1);
@ -158,7 +157,7 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data)
psize = EVBUFFER_LENGTH(c->stdin_data); psize = EVBUFFER_LENGTH(c->stdin_data);
if (psize == 0 || (pdata = malloc(psize + 1)) == NULL) { if (psize == 0 || (pdata = malloc(psize + 1)) == NULL) {
xfree(data); free(data);
return; return;
} }
memcpy(pdata, EVBUFFER_DATA(c->stdin_data), psize); memcpy(pdata, EVBUFFER_DATA(c->stdin_data), psize);
@ -174,5 +173,5 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data)
server_push_stderr(c); server_push_stderr(c);
} }
xfree(data); free(data);
} }

View File

@ -66,7 +66,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx)
dflag = args_has(self->args, 'd'); dflag = args_has(self->args, 'd');
if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) { if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) {
ctx->error(ctx, "can't move window: %s", cause); ctx->error(ctx, "can't move window: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
server_unlink_window(src, wl); server_unlink_window(src, wl);

View File

@ -130,7 +130,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
if (!detached && ctx->cmdclient != NULL) { if (!detached && ctx->cmdclient != NULL) {
if (server_client_open(ctx->cmdclient, NULL, &cause) != 0) { if (server_client_open(ctx->cmdclient, NULL, &cause) != 0) {
ctx->error(ctx, "open terminal failed: %s", cause); ctx->error(ctx, "open terminal failed: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
} }
@ -201,7 +201,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
s = session_create(newname, cmd, cwd, &env, tiop, idx, sx, sy, &cause); s = session_create(newname, cmd, cwd, &env, tiop, idx, sx, sy, &cause);
if (s == NULL) { if (s == NULL) {
ctx->error(ctx, "create session failed: %s", cause); ctx->error(ctx, "create session failed: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
environ_free(&env); environ_free(&env);
@ -264,7 +264,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) {
cause = ARRAY_ITEM(&cfg_causes, i); cause = ARRAY_ITEM(&cfg_causes, i);
window_copy_add(wp, "%s", cause); window_copy_add(wp, "%s", cause);
xfree(cause); free(cause);
} }
ARRAY_FREE(&cfg_causes); ARRAY_FREE(&cfg_causes);
} }

View File

@ -112,7 +112,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx)
wl = session_new(s, args_get(args, 'n'), cmd, cwd, idx, &cause); wl = session_new(s, args_get(args, 'n'), cmd, cwd, idx, &cause);
if (wl == NULL) { if (wl == NULL) {
ctx->error(ctx, "create window failed: %s", cause); ctx->error(ctx, "create window failed: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
if (!detached) { if (!detached) {
@ -134,7 +134,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx)
cp = format_expand(ft, template); cp = format_expand(ft, template);
ctx->print(ctx, "%s", cp); ctx->print(ctx, "%s", cp);
xfree(cp); free(cp);
format_free(ft); format_free(ft);
} }

View File

@ -64,7 +64,7 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
} }

View File

@ -59,7 +59,7 @@ cmd_rename_session_exec(struct cmd *self, struct cmd_ctx *ctx)
return (-1); return (-1);
RB_REMOVE(sessions, &sessions, s); RB_REMOVE(sessions, &sessions, s);
xfree(s->name); free(s->name);
s->name = xstrdup(newname); s->name = xstrdup(newname);
RB_INSERT(sessions, &sessions, s); RB_INSERT(sessions, &sessions, s);

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -79,7 +80,7 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
cmd = NULL; cmd = NULL;
if (window_pane_spawn(wp, cmd, NULL, NULL, &env, s->tio, &cause) != 0) { if (window_pane_spawn(wp, cmd, NULL, NULL, &env, s->tio, &cause) != 0) {
ctx->error(ctx, "respawn pane failed: %s", cause); ctx->error(ctx, "respawn pane failed: %s", cause);
xfree(cause); free(cause);
environ_free(&env); environ_free(&env);
return (-1); return (-1);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -81,7 +82,7 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx)
cmd = NULL; cmd = NULL;
if (window_pane_spawn(wp, cmd, NULL, NULL, &env, s->tio, &cause) != 0) { if (window_pane_spawn(wp, cmd, NULL, NULL, &env, s->tio, &cause) != 0) {
ctx->error(ctx, "respawn window failed: %s", cause); ctx->error(ctx, "respawn window failed: %s", cause);
xfree(cause); free(cause);
environ_free(&env); environ_free(&env);
server_destroy_pane(wp); server_destroy_pane(wp);
return (-1); return (-1);

View File

@ -20,6 +20,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -101,7 +102,7 @@ cmd_run_shell_callback(struct job *job)
ctx->print(ctx, "%s", line); ctx->print(ctx, "%s", line);
lines++; lines++;
xfree(line); free(line);
} }
cmd = cdata->cmd; cmd = cdata->cmd;
@ -119,7 +120,7 @@ cmd_run_shell_callback(struct job *job)
ctx->print(ctx, "%s", msg); ctx->print(ctx, "%s", msg);
else else
ctx->info(ctx, "%s", msg); ctx->info(ctx, "%s", msg);
xfree(msg); free(msg);
} }
} }
@ -136,6 +137,6 @@ cmd_run_shell_free(void *data)
if (ctx->curclient != NULL) if (ctx->curclient != NULL)
ctx->curclient->references--; ctx->curclient->references--;
xfree(cdata->cmd); free(cdata->cmd);
xfree(cdata); free(cdata);
} }

View File

@ -20,6 +20,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h> #include <errno.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -62,7 +63,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -60,14 +61,14 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
xfree(pdata); free(pdata);
return (-1); return (-1);
} }
if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) { if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) {
ctx->error(ctx, "no buffer %d", buffer); ctx->error(ctx, "no buffer %d", buffer);
xfree(pdata); free(pdata);
return (-1); return (-1);
} }

View File

@ -257,7 +257,7 @@ cmd_set_option_string(struct cmd *self, unused struct cmd_ctx *ctx,
o = options_set_string(oo, oe->name, "%s", newval); o = options_set_string(oo, oe->name, "%s", newval);
xfree(newval); free(newval);
return (o); return (o);
} }

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <vis.h> #include <vis.h>
#include "tmux.h" #include "tmux.h"
@ -61,7 +62,7 @@ cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
ctx->error(ctx, "buffer %s", cause); ctx->error(ctx, "buffer %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }
@ -103,9 +104,9 @@ cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
buf[len] = '\0'; buf[len] = '\0';
ctx->print(ctx, "%s", buf); ctx->print(ctx, "%s", buf);
} }
xfree(buf); free(buf);
xfree(in); free(in);
return (0); return (0);
} }

View File

@ -18,6 +18,8 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include "tmux.h" #include "tmux.h"
/* /*
@ -59,13 +61,13 @@ cmd_source_file_exec(struct cmd *self, struct cmd_ctx *ctx)
for (i = 0; i < ARRAY_LENGTH(&causes); i++) { for (i = 0; i < ARRAY_LENGTH(&causes); i++) {
cause = ARRAY_ITEM(&causes, i); cause = ARRAY_ITEM(&causes, i);
window_copy_add(wp, "%s", cause); window_copy_add(wp, "%s", cause);
xfree(cause); free(cause);
} }
} else { } else {
for (i = 0; i < ARRAY_LENGTH(&causes); i++) { for (i = 0; i < ARRAY_LENGTH(&causes); i++) {
cause = ARRAY_ITEM(&causes, i); cause = ARRAY_ITEM(&causes, i);
ctx->print(ctx, "%s", cause); ctx->print(ctx, "%s", cause);
xfree(cause); free(cause);
} }
} }
ARRAY_FREE(&causes); ARRAY_FREE(&causes);

View File

@ -94,7 +94,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx)
size = args_strtonum(args, 'l', 0, INT_MAX, &cause); size = args_strtonum(args, 'l', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
xasprintf(&new_cause, "size %s", cause); xasprintf(&new_cause, "size %s", cause);
xfree(cause); free(cause);
cause = new_cause; cause = new_cause;
goto error; goto error;
} }
@ -102,7 +102,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx)
percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause); percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause);
if (cause != NULL) { if (cause != NULL) {
xasprintf(&new_cause, "percentage %s", cause); xasprintf(&new_cause, "percentage %s", cause);
xfree(cause); free(cause);
cause = new_cause; cause = new_cause;
goto error; goto error;
} }
@ -151,7 +151,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx)
cp = format_expand(ft, template); cp = format_expand(ft, template);
ctx->print(ctx, "%s", cp); ctx->print(ctx, "%s", cp);
xfree(cp); free(cp);
format_free(ft); format_free(ft);
} }
@ -163,6 +163,6 @@ error:
if (new_wp != NULL) if (new_wp != NULL)
window_remove_pane(w, new_wp); window_remove_pane(w, new_wp);
ctx->error(ctx, "create pane failed: %s", cause); ctx->error(ctx, "create pane failed: %s", cause);
xfree(cause); free(cause);
return (-1); return (-1);
} }

View File

@ -87,7 +87,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
buf = xrealloc(buf, 1, len + strlen(t) + 1); buf = xrealloc(buf, 1, len + strlen(t) + 1);
strlcpy(buf + len, t, strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1);
len += strlen(t); len += strlen(t);
xfree(t); free(t);
break; break;
case '"': case '"':
if ((t = cmd_string_string(s, &p, '"', 1)) == NULL) if ((t = cmd_string_string(s, &p, '"', 1)) == NULL)
@ -95,7 +95,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
buf = xrealloc(buf, 1, len + strlen(t) + 1); buf = xrealloc(buf, 1, len + strlen(t) + 1);
strlcpy(buf + len, t, strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1);
len += strlen(t); len += strlen(t);
xfree(t); free(t);
break; break;
case '$': case '$':
if ((t = cmd_string_variable(s, &p)) == NULL) if ((t = cmd_string_variable(s, &p)) == NULL)
@ -103,7 +103,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
buf = xrealloc(buf, 1, len + strlen(t) + 1); buf = xrealloc(buf, 1, len + strlen(t) + 1);
strlcpy(buf + len, t, strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1);
len += strlen(t); len += strlen(t);
xfree(t); free(t);
break; break;
case '#': case '#':
/* Comment: discard rest of line. */ /* Comment: discard rest of line. */
@ -152,7 +152,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
buf = xrealloc(buf, 1, len + strlen(t) + 1); buf = xrealloc(buf, 1, len + strlen(t) + 1);
strlcpy(buf + len, t, strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1);
len += strlen(t); len += strlen(t);
xfree(t); free(t);
break; break;
} }
/* FALLTHROUGH */ /* FALLTHROUGH */
@ -170,13 +170,12 @@ error:
xasprintf(cause, "invalid or unknown command: %s", s); xasprintf(cause, "invalid or unknown command: %s", s);
out: out:
if (buf != NULL) free(buf);
xfree(buf);
if (argv != NULL) { if (argv != NULL) {
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
xfree(argv[i]); free(argv[i]);
xfree(argv); free(argv);
} }
return (rval); return (rval);
@ -224,7 +223,7 @@ cmd_string_string(const char *s, size_t *p, char endch, int esc)
buf = xrealloc(buf, 1, len + strlen(t) + 1); buf = xrealloc(buf, 1, len + strlen(t) + 1);
strlcpy(buf + len, t, strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1);
len += strlen(t); len += strlen(t);
xfree(t); free(t);
continue; continue;
} }
@ -239,8 +238,7 @@ cmd_string_string(const char *s, size_t *p, char endch, int esc)
return (buf); return (buf);
error: error:
if (buf != NULL) free(buf);
xfree(buf);
return (NULL); return (NULL);
} }
@ -303,14 +301,13 @@ cmd_string_variable(const char *s, size_t *p)
buf[len] = '\0'; buf[len] = '\0';
envent = environ_find(&global_environ, buf); envent = environ_find(&global_environ, buf);
xfree(buf); free(buf);
if (envent == NULL) if (envent == NULL)
return (xstrdup("")); return (xstrdup(""));
return (xstrdup(envent->value)); return (xstrdup(envent->value));
error: error:
if (buf != NULL) free(buf);
xfree(buf);
return (NULL); return (NULL);
} }
@ -334,7 +331,7 @@ cmd_string_expand_tilde(const char *s, size_t *p)
return (NULL); return (NULL);
if ((pw = getpwnam(username)) != NULL) if ((pw = getpwnam(username)) != NULL)
home = pw->pw_dir; home = pw->pw_dir;
xfree(username); free(username);
} }
if (home == NULL) if (home == NULL)
return (NULL); return (NULL);

View File

@ -18,6 +18,8 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include "tmux.h" #include "tmux.h"
/* /*
@ -100,7 +102,7 @@ cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
while (!RB_EMPTY(mtab->tree)) { while (!RB_EMPTY(mtab->tree)) {
mbind = RB_ROOT(mtab->tree); mbind = RB_ROOT(mtab->tree);
RB_REMOVE(mode_key_tree, mtab->tree, mbind); RB_REMOVE(mode_key_tree, mtab->tree, mbind);
xfree(mbind); free(mbind);
} }
return (0); return (0);
} }
@ -109,7 +111,7 @@ cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
mtmp.mode = !!args_has(args, 'c'); mtmp.mode = !!args_has(args, 'c');
if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) { if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
RB_REMOVE(mode_key_tree, mtab->tree, mbind); RB_REMOVE(mode_key_tree, mtab->tree, mbind);
xfree(mbind); free(mbind);
} }
return (0); return (0);
} }

43
cmd.c
View File

@ -198,11 +198,9 @@ cmd_free_argv(int argc, char **argv)
if (argc == 0) if (argc == 0)
return; return;
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++)
if (argv[i] != NULL) free(argv[i]);
xfree(argv[i]); free(argv);
}
xfree(argv);
} }
struct cmd * struct cmd *
@ -291,9 +289,8 @@ cmd_exec(struct cmd *cmd, struct cmd_ctx *ctx)
void void
cmd_free(struct cmd *cmd) cmd_free(struct cmd *cmd)
{ {
if (cmd->args != NULL)
args_free(cmd->args); args_free(cmd->args);
xfree(cmd); free(cmd);
} }
size_t size_t
@ -507,7 +504,7 @@ cmd_find_client(struct cmd_ctx *ctx, const char *arg)
if (c == NULL) if (c == NULL)
ctx->error(ctx, "client not found: %s", tmparg); ctx->error(ctx, "client not found: %s", tmparg);
xfree(tmparg); free(tmparg);
return (c); return (c);
} }
@ -767,7 +764,7 @@ cmd_find_session(struct cmd_ctx *ctx, const char *arg, int prefer_unattached)
/* An empty session name is the current session. */ /* An empty session name is the current session. */
if (*tmparg == '\0') { if (*tmparg == '\0') {
xfree(tmparg); free(tmparg);
return (cmd_current_session(ctx, prefer_unattached)); return (cmd_current_session(ctx, prefer_unattached));
} }
@ -786,7 +783,7 @@ cmd_find_session(struct cmd_ctx *ctx, const char *arg, int prefer_unattached)
ctx->error(ctx, "session not found: %s", tmparg); ctx->error(ctx, "session not found: %s", tmparg);
} }
xfree(tmparg); free(tmparg);
return (s); return (s);
} }
@ -861,7 +858,7 @@ cmd_find_window(struct cmd_ctx *ctx, const char *arg, struct session **sp)
goto not_found; goto not_found;
if (sessptr != NULL) if (sessptr != NULL)
xfree(sessptr); free(sessptr);
return (wl); return (wl);
no_colon: no_colon:
@ -899,8 +896,7 @@ no_session:
ctx->error(ctx, "multiple sessions: %s", arg); ctx->error(ctx, "multiple sessions: %s", arg);
else else
ctx->error(ctx, "session not found: %s", arg); ctx->error(ctx, "session not found: %s", arg);
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (NULL); return (NULL);
not_found: not_found:
@ -908,8 +904,7 @@ not_found:
ctx->error(ctx, "multiple windows: %s", arg); ctx->error(ctx, "multiple windows: %s", arg);
else else
ctx->error(ctx, "window not found: %s", arg); ctx->error(ctx, "window not found: %s", arg);
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (NULL); return (NULL);
} }
@ -1000,8 +995,7 @@ cmd_find_index(struct cmd_ctx *ctx, const char *arg, struct session **sp)
} else if ((idx = cmd_lookup_index(s, winptr, &ambiguous)) == -1) } else if ((idx = cmd_lookup_index(s, winptr, &ambiguous)) == -1)
goto invalid_index; goto invalid_index;
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (idx); return (idx);
no_colon: no_colon:
@ -1040,8 +1034,7 @@ no_session:
ctx->error(ctx, "multiple sessions: %s", arg); ctx->error(ctx, "multiple sessions: %s", arg);
else else
ctx->error(ctx, "session not found: %s", arg); ctx->error(ctx, "session not found: %s", arg);
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (-2); return (-2);
invalid_index: invalid_index:
@ -1049,8 +1042,7 @@ invalid_index:
goto not_found; goto not_found;
ctx->error(ctx, "invalid index: %s", arg); ctx->error(ctx, "invalid index: %s", arg);
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (-2); return (-2);
not_found: not_found:
@ -1058,8 +1050,7 @@ not_found:
ctx->error(ctx, "multiple windows: %s", arg); ctx->error(ctx, "multiple windows: %s", arg);
else else
ctx->error(ctx, "window not found: %s", arg); ctx->error(ctx, "window not found: %s", arg);
if (sessptr != NULL) free(sessptr);
xfree(sessptr);
return (-2); return (-2);
} }
@ -1153,7 +1144,7 @@ cmd_find_pane(struct cmd_ctx *ctx,
goto lookup_string; goto lookup_string;
} }
xfree(winptr); free(winptr);
return (wl); return (wl);
lookup_string: lookup_string:
@ -1163,7 +1154,7 @@ lookup_string:
goto error; goto error;
} }
xfree(winptr); free(winptr);
return (wl); return (wl);
no_period: no_period:
@ -1189,7 +1180,7 @@ lookup_window:
return (wl); return (wl);
error: error:
xfree(winptr); free(winptr);
return (NULL); return (NULL);
} }

View File

@ -20,6 +20,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <event.h> #include <event.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -110,12 +111,12 @@ control_callback(struct client *c, int closed, unused void *data)
if (cmd_string_parse(line, &cmdlist, &cause) != 0) { if (cmd_string_parse(line, &cmdlist, &cause) != 0) {
control_write(c, "%%error in line \"%s\": %s", line, control_write(c, "%%error in line \"%s\": %s", line,
cause); cause);
xfree(cause); free(cause);
} else { } else {
cmd_list_exec(cmdlist, &ctx); cmd_list_exec(cmdlist, &ctx);
cmd_list_free(cmdlist); cmd_list_free(cmdlist);
} }
xfree(line); free(line);
} }
} }

View File

@ -51,10 +51,9 @@ environ_free(struct environ *env)
while (!RB_EMPTY(env)) { while (!RB_EMPTY(env)) {
envent = RB_ROOT(env); envent = RB_ROOT(env);
RB_REMOVE(environ, env, envent); RB_REMOVE(environ, env, envent);
xfree(envent->name); free(envent->name);
if (envent->value != NULL) free(envent->value);
xfree(envent->value); free(envent);
xfree(envent);
} }
} }
@ -85,8 +84,7 @@ environ_set(struct environ *env, const char *name, const char *value)
struct environ_entry *envent; struct environ_entry *envent;
if ((envent = environ_find(env, name)) != NULL) { if ((envent = environ_find(env, name)) != NULL) {
if (envent->value != NULL) free(envent->value);
xfree(envent->value);
if (value != NULL) if (value != NULL)
envent->value = xstrdup(value); envent->value = xstrdup(value);
else else
@ -117,7 +115,7 @@ environ_put(struct environ *env, const char *var)
name[strcspn(name, "=")] = '\0'; name[strcspn(name, "=")] = '\0';
environ_set(env, name, value); environ_set(env, name, value);
xfree(name); free(name);
} }
/* Unset an environment variable. */ /* Unset an environment variable. */
@ -129,10 +127,9 @@ environ_unset(struct environ *env, const char *name)
if ((envent = environ_find(env, name)) == NULL) if ((envent = environ_find(env, name)) == NULL)
return; return;
RB_REMOVE(environ, env, envent); RB_REMOVE(environ, env, envent);
xfree(envent->name); free(envent->name);
if (envent->value != NULL) free(envent->value);
xfree(envent->value); free(envent);
xfree(envent);
} }
/* /*
@ -152,7 +149,7 @@ environ_update(const char *vars, struct environ *srcenv, struct environ *dstenv)
else else
environ_set(dstenv, envent->name, envent->value); environ_set(dstenv, envent->name, envent->value);
} }
xfree(copyvars); free(copyvars);
} }
/* Push environment into the real environment - use after fork(). */ /* Push environment into the real environment - use after fork(). */

View File

@ -20,6 +20,7 @@
#include <netdb.h> #include <netdb.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
@ -102,12 +103,12 @@ format_free(struct format_tree *ft)
fe_next = RB_NEXT(format_tree, ft, fe); fe_next = RB_NEXT(format_tree, ft, fe);
RB_REMOVE(format_tree, ft, fe); RB_REMOVE(format_tree, ft, fe);
xfree(fe->value); free(fe->value);
xfree(fe->key); free(fe->key);
xfree(fe); free(fe);
} }
xfree (ft); free (ft);
} }
/* Add a key-value pair. */ /* Add a key-value pair. */
@ -195,11 +196,11 @@ format_replace(struct format_tree *ft,
memcpy(*buf + *off, value, valuelen); memcpy(*buf + *off, value, valuelen);
*off += valuelen; *off += valuelen;
xfree(copy); free(copy);
return (0); return (0);
fail: fail:
xfree(copy); free(copy);
return (-1); return (-1);
} }
@ -351,8 +352,8 @@ format_winlink(struct format_tree *ft, struct session *s, struct winlink *wl)
format_add(ft, "window_active", "%d", wl == s->curw); format_add(ft, "window_active", "%d", wl == s->curw);
format_add(ft, "window_panes", "%u", window_count_panes(w)); format_add(ft, "window_panes", "%u", window_count_panes(w));
xfree(flags); free(flags);
xfree(layout); free(layout);
} }
/* Set default format keys for a window pane. */ /* Set default format keys for a window pane. */
@ -403,5 +404,5 @@ format_paste_buffer(struct format_tree *ft, struct paste_buffer *pb)
format_add(ft, "buffer_size", "%zu", pb->size); format_add(ft, "buffer_size", "%zu", pb->size);
format_add(ft, "buffer_sample", "%s", pb_print); format_add(ft, "buffer_sample", "%s", pb_print);
xfree(pb_print); free(pb_print);
} }

17
grid.c
View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -98,15 +99,13 @@ grid_destroy(struct grid *gd)
for (yy = 0; yy < gd->hsize + gd->sy; yy++) { for (yy = 0; yy < gd->hsize + gd->sy; yy++) {
gl = &gd->linedata[yy]; gl = &gd->linedata[yy];
if (gl->celldata != NULL) free(gl->celldata);
xfree(gl->celldata); free(gl->utf8data);
if (gl->utf8data != NULL)
xfree(gl->utf8data);
} }
xfree(gd->linedata); free(gd->linedata);
xfree(gd); free(gd);
} }
/* Compare grids. */ /* Compare grids. */
@ -373,10 +372,8 @@ grid_clear_lines(struct grid *gd, u_int py, u_int ny)
for (yy = py; yy < py + ny; yy++) { for (yy = py; yy < py + ny; yy++) {
gl = &gd->linedata[yy]; gl = &gd->linedata[yy];
if (gl->celldata != NULL) free(gl->celldata);
xfree(gl->celldata); free(gl->utf8data);
if (gl->utf8data != NULL)
xfree(gl->utf8data);
memset(gl, 0, sizeof *gl); memset(gl, 0, sizeof *gl);
} }
} }

View File

@ -164,7 +164,7 @@ input_key(struct window_pane *wp, int key)
if (options_get_number(&wp->window->options, "xterm-keys")) { if (options_get_number(&wp->window->options, "xterm-keys")) {
if ((out = xterm_keys_lookup(key)) != NULL) { if ((out = xterm_keys_lookup(key)) != NULL) {
bufferevent_write(wp->event, out, strlen(out)); bufferevent_write(wp->event, out, strlen(out));
xfree(out); free(out);
return; return;
} }
} }

View File

@ -853,7 +853,7 @@ input_reply(struct input_ctx *ictx, const char *fmt, ...)
va_end(ap); va_end(ap);
bufferevent_write(ictx->wp->event, reply, strlen(reply)); bufferevent_write(ictx->wp->event, reply, strlen(reply));
xfree(reply); free(reply);
} }
/* Clear saved state. */ /* Clear saved state. */

5
job.c
View File

@ -21,6 +21,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <paths.h> #include <paths.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@ -117,7 +118,7 @@ job_free(struct job *job)
log_debug("free job %p: %s", job, job->cmd); log_debug("free job %p: %s", job, job->cmd);
LIST_REMOVE(job, lentry); LIST_REMOVE(job, lentry);
xfree(job->cmd); free(job->cmd);
if (job->freefn != NULL && job->data != NULL) if (job->freefn != NULL && job->data != NULL)
job->freefn(job->data); job->freefn(job->data);
@ -129,7 +130,7 @@ job_free(struct job *job)
if (job->fd != -1) if (job->fd != -1)
close(job->fd); close(job->fd);
xfree(job); free(job);
} }
/* Job buffer error callback. */ /* Job buffer error callback. */

View File

@ -90,7 +90,7 @@ key_bindings_clean(void)
bd = RB_ROOT(&dead_key_bindings); bd = RB_ROOT(&dead_key_bindings);
RB_REMOVE(key_bindings, &dead_key_bindings, bd); RB_REMOVE(key_bindings, &dead_key_bindings, bd);
cmd_list_free(bd->cmdlist); cmd_list_free(bd->cmdlist);
xfree(bd); free(bd);
} }
} }
@ -216,7 +216,7 @@ key_bindings_error(struct cmd_ctx *ctx, const char *fmt, ...)
*msg = toupper((u_char) *msg); *msg = toupper((u_char) *msg);
status_message_set(ctx->curclient, "%s", msg); status_message_set(ctx->curclient, "%s", msg);
xfree(msg); free(msg);
} }
void printflike2 void printflike2
@ -258,7 +258,7 @@ key_bindings_info(struct cmd_ctx *ctx, const char *fmt, ...)
*msg = toupper((u_char) *msg); *msg = toupper((u_char) *msg);
status_message_set(ctx->curclient, "%s", msg); status_message_set(ctx->curclient, "%s", msg);
xfree(msg); free(msg);
} }
void void

View File

@ -78,7 +78,7 @@ layout_free_cell(struct layout_cell *lc)
break; break;
} }
xfree(lc); free(lc);
} }
void void
@ -781,8 +781,8 @@ layout_list_add(struct window *w)
TAILQ_REMOVE(&w->layout_list, ll, entry); TAILQ_REMOVE(&w->layout_list, ll, entry);
w->layout_list_size--; w->layout_list_size--;
xfree(ll->layout); free(ll->layout);
xfree(ll); free(ll);
} }
} }

View File

@ -20,6 +20,7 @@
#include <ctype.h> #include <ctype.h>
#include <libgen.h> #include <libgen.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@ -73,12 +74,12 @@ window_name_callback(unused int fd, unused short events, void *data)
wname = parse_window_name(name + 1); wname = parse_window_name(name + 1);
else else
wname = parse_window_name(name); wname = parse_window_name(name);
xfree(name); free(name);
} }
if (w->active->fd == -1) { if (w->active->fd == -1) {
xasprintf(&name, "%s[dead]", wname); xasprintf(&name, "%s[dead]", wname);
xfree(wname); free(wname);
wname = name; wname = name;
} }
@ -86,7 +87,7 @@ window_name_callback(unused int fd, unused short events, void *data)
window_set_name(w, wname); window_set_name(w, wname);
server_status_window(w); server_status_window(w);
} }
xfree(wname); free(wname);
} }
char * char *
@ -122,6 +123,6 @@ parse_window_name(const char *in)
if (*name == '/') if (*name == '/')
name = basename(name); name = basename(name);
name = xstrdup(name); name = xstrdup(name);
xfree(copy); free(copy);
return (name); return (name);
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -51,10 +52,10 @@ options_free(struct options *oo)
while (!RB_EMPTY(&oo->tree)) { while (!RB_EMPTY(&oo->tree)) {
o = RB_ROOT(&oo->tree); o = RB_ROOT(&oo->tree);
RB_REMOVE(options_tree, &oo->tree, o); RB_REMOVE(options_tree, &oo->tree, o);
xfree(o->name); free(o->name);
if (o->type == OPTIONS_STRING) if (o->type == OPTIONS_STRING)
xfree(o->str); free(o->str);
xfree(o); free(o);
} }
} }
@ -92,10 +93,10 @@ options_remove(struct options *oo, const char *name)
return; return;
RB_REMOVE(options_tree, &oo->tree, o); RB_REMOVE(options_tree, &oo->tree, o);
xfree(o->name); free(o->name);
if (o->type == OPTIONS_STRING) if (o->type == OPTIONS_STRING)
xfree(o->str); free(o->str);
xfree(o); free(o);
} }
struct options_entry *printflike3 struct options_entry *printflike3
@ -109,7 +110,7 @@ options_set_string(struct options *oo, const char *name, const char *fmt, ...)
o->name = xstrdup(name); o->name = xstrdup(name);
RB_INSERT(options_tree, &oo->tree, o); RB_INSERT(options_tree, &oo->tree, o);
} else if (o->type == OPTIONS_STRING) } else if (o->type == OPTIONS_STRING)
xfree(o->str); free(o->str);
va_start(ap, fmt); va_start(ap, fmt);
o->type = OPTIONS_STRING; o->type = OPTIONS_STRING;
@ -140,7 +141,7 @@ options_set_number(struct options *oo, const char *name, long long value)
o->name = xstrdup(name); o->name = xstrdup(name);
RB_INSERT(options_tree, &oo->tree, o); RB_INSERT(options_tree, &oo->tree, o);
} else if (o->type == OPTIONS_STRING) } else if (o->type == OPTIONS_STRING)
xfree(o->str); free(o->str);
o->type = OPTIONS_NUMBER; o->type = OPTIONS_NUMBER;
o->num = value; o->num = value;

15
paste.c
View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/time.h> #include <sys/time.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <vis.h> #include <vis.h>
@ -70,8 +71,8 @@ paste_free_top(struct paste_stack *ps)
pb = ARRAY_FIRST(ps); pb = ARRAY_FIRST(ps);
ARRAY_REMOVE(ps, 0); ARRAY_REMOVE(ps, 0);
xfree(pb->data); free(pb->data);
xfree(pb); free(pb);
return (0); return (0);
} }
@ -88,8 +89,8 @@ paste_free_index(struct paste_stack *ps, u_int idx)
pb = ARRAY_ITEM(ps, idx); pb = ARRAY_ITEM(ps, idx);
ARRAY_REMOVE(ps, idx); ARRAY_REMOVE(ps, idx);
xfree(pb->data); free(pb->data);
xfree(pb); free(pb);
return (0); return (0);
} }
@ -108,8 +109,8 @@ paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit)
while (ARRAY_LENGTH(ps) >= limit) { while (ARRAY_LENGTH(ps) >= limit) {
pb = ARRAY_LAST(ps); pb = ARRAY_LAST(ps);
xfree(pb->data); free(pb->data);
xfree(pb); free(pb);
ARRAY_TRUNC(ps, 1); ARRAY_TRUNC(ps, 1);
} }
@ -137,7 +138,7 @@ paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size)
return (-1); return (-1);
pb = ARRAY_ITEM(ps, idx); pb = ARRAY_ITEM(ps, idx);
xfree(pb->data); free(pb->data);
pb->data = data; pb->data = data;
pb->size = size; pb->size = size;

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -102,8 +103,8 @@ screen_write_cstrlen(int utf8flag, const char *fmt, ...)
size = screen_write_strlen(utf8flag, "%s", msg2); size = screen_write_strlen(utf8flag, "%s", msg2);
xfree(msg); free(msg);
xfree(msg2); free(msg2);
return (size); return (size);
} }
@ -141,7 +142,7 @@ screen_write_strlen(int utf8flag, const char *fmt, ...)
} }
} }
xfree(msg); free(msg);
return (size); return (size);
} }
@ -215,7 +216,7 @@ screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
} }
} }
xfree(msg); free(msg);
} }
/* Write string, similar to nputs, but with embedded formatting (#[]). */ /* Write string, similar to nputs, but with embedded formatting (#[]). */
@ -285,7 +286,7 @@ screen_write_cnputs(struct screen_write_ctx *ctx,
} }
} }
xfree(msg); free(msg);
} }
/* Parse an embedded style of the form "fg=colour,bg=colour,bright,...". */ /* Parse an embedded style of the form "fg=colour,bg=colour,bright,...". */

View File

@ -70,10 +70,9 @@ screen_reinit(struct screen *s)
void void
screen_free(struct screen *s) screen_free(struct screen *s)
{ {
if (s->tabs != NULL) free(s->tabs);
xfree(s->tabs); free(s->title);
xfree(s->title); free(s->ccolour);
xfree(s->ccolour);
grid_destroy(s->grid); grid_destroy(s->grid);
} }
@ -83,8 +82,7 @@ screen_reset_tabs(struct screen *s)
{ {
u_int i; u_int i;
if (s->tabs != NULL) free(s->tabs);
xfree(s->tabs);
if ((s->tabs = bit_alloc(screen_size_x(s))) == NULL) if ((s->tabs = bit_alloc(screen_size_x(s))) == NULL)
fatal("bit_alloc failed"); fatal("bit_alloc failed");
@ -104,7 +102,7 @@ screen_set_cursor_style(struct screen *s, u_int style)
void void
screen_set_cursor_colour(struct screen *s, const char *colour_string) screen_set_cursor_colour(struct screen *s, const char *colour_string)
{ {
xfree(s->ccolour); free(s->ccolour);
s->ccolour = xstrdup(colour_string); s->ccolour = xstrdup(colour_string);
} }
@ -116,7 +114,7 @@ screen_set_title(struct screen *s, const char *title)
strlcpy(tmp, title, sizeof tmp); strlcpy(tmp, title, sizeof tmp);
xfree(s->title); free(s->title);
s->title = xstrdup(tmp); s->title = xstrdup(tmp);
} }

View File

@ -23,6 +23,7 @@
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <paths.h> #include <paths.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -151,31 +152,25 @@ server_client_lost(struct client *c)
status_free_jobs(&c->status_old); status_free_jobs(&c->status_old);
screen_free(&c->status); screen_free(&c->status);
if (c->title != NULL) free(c->title);
xfree(c->title);
evtimer_del(&c->repeat_timer); evtimer_del(&c->repeat_timer);
if (event_initialized(&c->identify_timer)) if (event_initialized(&c->identify_timer))
evtimer_del(&c->identify_timer); evtimer_del(&c->identify_timer);
if (c->message_string != NULL) free(c->message_string);
xfree(c->message_string);
if (event_initialized (&c->message_timer)) if (event_initialized (&c->message_timer))
evtimer_del(&c->message_timer); evtimer_del(&c->message_timer);
for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) { for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) {
msg = &ARRAY_ITEM(&c->message_log, i); msg = &ARRAY_ITEM(&c->message_log, i);
xfree(msg->msg); free(msg->msg);
} }
ARRAY_FREE(&c->message_log); ARRAY_FREE(&c->message_log);
if (c->prompt_string != NULL) free(c->prompt_string);
xfree(c->prompt_string); free(c->prompt_buffer);
if (c->prompt_buffer != NULL) free(c->cwd);
xfree(c->prompt_buffer);
if (c->cwd != NULL)
xfree(c->cwd);
environ_free(&c->environ); environ_free(&c->environ);
@ -662,12 +657,11 @@ server_client_set_title(struct client *c)
title = status_replace(c, NULL, NULL, NULL, template, time(NULL), 1); title = status_replace(c, NULL, NULL, NULL, template, time(NULL), 1);
if (c->title == NULL || strcmp(title, c->title) != 0) { if (c->title == NULL || strcmp(title, c->title) != 0) {
if (c->title != NULL) free(c->title);
xfree(c->title);
c->title = xstrdup(title); c->title = xstrdup(title);
tty_set_title(&c->tty, c->title); tty_set_title(&c->tty, c->title);
} }
xfree(title); free(title);
} }
/* Dispatch message from client. */ /* Dispatch message from client. */

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
@ -393,7 +394,7 @@ server_destroy_session_group(struct session *s)
TAILQ_FOREACH(s, &sg->sessions, gentry) TAILQ_FOREACH(s, &sg->sessions, gentry)
server_destroy_session(s); server_destroy_session(s);
TAILQ_REMOVE(&session_groups, sg, entry); TAILQ_REMOVE(&session_groups, sg, entry);
xfree(sg); free(sg);
} }
} }

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <event.h> #include <event.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "tmux.h" #include "tmux.h"
@ -211,7 +212,7 @@ server_window_check_content(
return (0); return (0);
if ((found = window_pane_search(wp, ptr, NULL)) == NULL) if ((found = window_pane_search(wp, ptr, NULL)) == NULL)
return (0); return (0);
xfree(found); free(found);
if (options_get_number(&s->options, "bell-on-alert")) if (options_get_number(&s->options, "bell-on-alert"))
ring_bell(s); ring_bell(s);

View File

@ -162,7 +162,7 @@ server_start(int lockfd, char *lockfile)
server_client_create(pair[1]); server_client_create(pair[1]);
unlink(lockfile); unlink(lockfile);
xfree(lockfile); free(lockfile);
close(lockfd); close(lockfd);
if (access(SYSTEM_CFG, R_OK) == 0) if (access(SYSTEM_CFG, R_OK) == 0)
@ -185,7 +185,7 @@ server_start(int lockfd, char *lockfile)
for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) {
cause = ARRAY_ITEM(&cfg_causes, i); cause = ARRAY_ITEM(&cfg_causes, i);
window_copy_add(wp, "%s", cause); window_copy_add(wp, "%s", cause);
xfree(cause); free(cause);
} }
ARRAY_FREE(&cfg_causes); ARRAY_FREE(&cfg_causes);
} }
@ -275,8 +275,8 @@ server_clean_dead(void)
next_s = RB_NEXT(sessions, &dead_sessions, s); next_s = RB_NEXT(sessions, &dead_sessions, s);
if (s->references == 0) { if (s->references == 0) {
RB_REMOVE(sessions, &dead_sessions, s); RB_REMOVE(sessions, &dead_sessions, s);
xfree(s->name); free(s->name);
xfree(s); free(s);
} }
s = next_s; s = next_s;
} }
@ -286,7 +286,7 @@ server_clean_dead(void)
if (c == NULL || c->references != 0) if (c == NULL || c->references != 0)
continue; continue;
ARRAY_SET(&dead_clients, i, NULL); ARRAY_SET(&dead_clients, i, NULL);
xfree(c); free(c);
} }
} }

View File

@ -126,8 +126,7 @@ session_create(const char *name, const char *cmd, const char *cwd,
s->name = NULL; s->name = NULL;
do { do {
s->idx = next_session++; s->idx = next_session++;
if (s->name != NULL) free (s->name);
xfree (s->name);
xasprintf(&s->name, "%u", s->idx); xasprintf(&s->name, "%u", s->idx);
} while (RB_FIND(sessions, &sessions, s) != NULL); } while (RB_FIND(sessions, &sessions, s) != NULL);
} }
@ -157,8 +156,7 @@ session_destroy(struct session *s)
RB_REMOVE(sessions, &sessions, s); RB_REMOVE(sessions, &sessions, s);
notify_session_closed(s); notify_session_closed(s);
if (s->tio != NULL) free(s->tio);
xfree(s->tio);
session_group_remove(s); session_group_remove(s);
environ_free(&s->environ); environ_free(&s->environ);
@ -172,7 +170,7 @@ session_destroy(struct session *s)
winlink_remove(&s->windows, wl); winlink_remove(&s->windows, wl);
} }
xfree(s->cwd); free(s->cwd);
RB_INSERT(sessions, &dead_sessions, s); RB_INSERT(sessions, &dead_sessions, s);
} }
@ -495,7 +493,7 @@ session_group_remove(struct session *s)
TAILQ_REMOVE(&sg->sessions, TAILQ_FIRST(&sg->sessions), gentry); TAILQ_REMOVE(&sg->sessions, TAILQ_FIRST(&sg->sessions), gentry);
if (TAILQ_EMPTY(&sg->sessions)) { if (TAILQ_EMPTY(&sg->sessions)) {
TAILQ_REMOVE(&session_groups, sg, entry); TAILQ_REMOVE(&session_groups, sg, entry);
xfree(sg); free(sg);
} }
} }

View File

@ -222,8 +222,7 @@ status_redraw(struct client *c)
/* Calculate the total size needed for the window list. */ /* Calculate the total size needed for the window list. */
wlstart = wloffset = wlwidth = 0; wlstart = wloffset = wlwidth = 0;
RB_FOREACH(wl, winlinks, &s->windows) { RB_FOREACH(wl, winlinks, &s->windows) {
if (wl->status_text != NULL) free(wl->status_text);
xfree(wl->status_text);
memcpy(&wl->status_cell, &stdgc, sizeof wl->status_cell); memcpy(&wl->status_cell, &stdgc, sizeof wl->status_cell);
wl->status_text = status_print(c, wl, t, &wl->status_cell); wl->status_text = status_print(c, wl, t, &wl->status_cell);
wl->status_width = wl->status_width =
@ -372,10 +371,8 @@ draw:
screen_write_stop(&ctx); screen_write_stop(&ctx);
out: out:
if (left != NULL) free(left);
xfree(left); free(right);
if (right != NULL)
xfree(right);
if (grid_compare(c->status.grid, old_status.grid) == 0) { if (grid_compare(c->status.grid, old_status.grid) == 0) {
screen_free(&old_status); screen_free(&old_status);
@ -491,8 +488,7 @@ do_replace:
} }
out: out:
if (freeptr != NULL) free(freeptr);
xfree(freeptr);
return; return;
skip_to: skip_to:
@ -572,7 +568,7 @@ status_find_job(struct client *c, char **iptr)
cmd[len++] = **iptr; cmd[len++] = **iptr;
} }
if (**iptr == '\0') /* no terminating ) */ { if (**iptr == '\0') /* no terminating ) */ {
xfree(cmd); free(cmd);
return (NULL); return (NULL);
} }
(*iptr)++; /* skip final ) */ (*iptr)++; /* skip final ) */
@ -582,7 +578,7 @@ status_find_job(struct client *c, char **iptr)
so_find.cmd = cmd; so_find.cmd = cmd;
so = RB_FIND(status_out_tree, &c->status_new, &so_find); so = RB_FIND(status_out_tree, &c->status_new, &so_find);
if (so != NULL && so->out != NULL) { if (so != NULL && so->out != NULL) {
xfree(cmd); free(cmd);
return (so->out); return (so->out);
} }
@ -600,7 +596,7 @@ status_find_job(struct client *c, char **iptr)
/* Lookup in the old tree. */ /* Lookup in the old tree. */
so_find.cmd = cmd; so_find.cmd = cmd;
so = RB_FIND(status_out_tree, &c->status_old, &so_find); so = RB_FIND(status_out_tree, &c->status_old, &so_find);
xfree(cmd); free(cmd);
if (so != NULL) if (so != NULL)
return (so->out); return (so->out);
return (NULL); return (NULL);
@ -618,10 +614,9 @@ status_free_jobs(struct status_out_tree *sotree)
so_next = RB_NEXT(status_out_tree, sotree, so); so_next = RB_NEXT(status_out_tree, sotree, so);
RB_REMOVE(status_out_tree, sotree, so); RB_REMOVE(status_out_tree, sotree, so);
if (so->out != NULL) free(so->out);
xfree(so->out); free(so->cmd);
xfree(so->cmd); free(so);
xfree(so);
} }
} }
@ -778,7 +773,7 @@ status_message_set(struct client *c, const char *fmt, ...)
limit = ARRAY_LENGTH(&c->message_log) - limit; limit = ARRAY_LENGTH(&c->message_log) - limit;
for (i = 0; i < limit; i++) { for (i = 0; i < limit; i++) {
msg = &ARRAY_FIRST(&c->message_log); msg = &ARRAY_FIRST(&c->message_log);
xfree(msg->msg); free(msg->msg);
ARRAY_REMOVE(&c->message_log, 0); ARRAY_REMOVE(&c->message_log, 0);
} }
} }
@ -803,7 +798,7 @@ status_message_clear(struct client *c)
if (c->message_string == NULL) if (c->message_string == NULL)
return; return;
xfree(c->message_string); free(c->message_string);
c->message_string = NULL; c->message_string = NULL;
c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE);
@ -912,10 +907,10 @@ status_prompt_clear(struct client *c)
if (c->prompt_freefn != NULL && c->prompt_data != NULL) if (c->prompt_freefn != NULL && c->prompt_data != NULL)
c->prompt_freefn(c->prompt_data); c->prompt_freefn(c->prompt_data);
xfree(c->prompt_string); free(c->prompt_string);
c->prompt_string = NULL; c->prompt_string = NULL;
xfree(c->prompt_buffer); free(c->prompt_buffer);
c->prompt_buffer = NULL; c->prompt_buffer = NULL;
c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE);
@ -928,11 +923,11 @@ status_prompt_clear(struct client *c)
void void
status_prompt_update(struct client *c, const char *msg, const char *input) status_prompt_update(struct client *c, const char *msg, const char *input)
{ {
xfree(c->prompt_string); free(c->prompt_string);
c->prompt_string = status_replace(c, NULL, NULL, NULL, msg, c->prompt_string = status_replace(c, NULL, NULL, NULL, msg,
time(NULL), 0); time(NULL), 0);
xfree(c->prompt_buffer); free(c->prompt_buffer);
c->prompt_buffer = status_replace(c, NULL, NULL, NULL, input, c->prompt_buffer = status_replace(c, NULL, NULL, NULL, input,
time(NULL), 0); time(NULL), 0);
c->prompt_index = strlen(c->prompt_buffer); c->prompt_index = strlen(c->prompt_buffer);
@ -1109,7 +1104,7 @@ status_prompt_key(struct client *c, int key)
memcpy(first, s, strlen(s)); memcpy(first, s, strlen(s));
c->prompt_index = (first - c->prompt_buffer) + strlen(s); c->prompt_index = (first - c->prompt_buffer) + strlen(s);
xfree(s); free(s);
c->flags |= CLIENT_STATUS; c->flags |= CLIENT_STATUS;
break; break;
@ -1250,7 +1245,7 @@ status_prompt_key(struct client *c, int key)
histstr = status_prompt_up_history(&c->prompt_hindex); histstr = status_prompt_up_history(&c->prompt_hindex);
if (histstr == NULL) if (histstr == NULL)
break; break;
xfree(c->prompt_buffer); free(c->prompt_buffer);
c->prompt_buffer = xstrdup(histstr); c->prompt_buffer = xstrdup(histstr);
c->prompt_index = strlen(c->prompt_buffer); c->prompt_index = strlen(c->prompt_buffer);
c->flags |= CLIENT_STATUS; c->flags |= CLIENT_STATUS;
@ -1259,7 +1254,7 @@ status_prompt_key(struct client *c, int key)
histstr = status_prompt_down_history(&c->prompt_hindex); histstr = status_prompt_down_history(&c->prompt_hindex);
if (histstr == NULL) if (histstr == NULL)
break; break;
xfree(c->prompt_buffer); free(c->prompt_buffer);
c->prompt_buffer = xstrdup(histstr); c->prompt_buffer = xstrdup(histstr);
c->prompt_index = strlen(c->prompt_buffer); c->prompt_index = strlen(c->prompt_buffer);
c->flags |= CLIENT_STATUS; c->flags |= CLIENT_STATUS;
@ -1383,7 +1378,7 @@ status_prompt_add_history(const char *line)
return; return;
if (size == PROMPT_HISTORY) { if (size == PROMPT_HISTORY) {
xfree(ARRAY_FIRST(&status_prompt_history)); free(ARRAY_FIRST(&status_prompt_history));
ARRAY_REMOVE(&status_prompt_history, 0); ARRAY_REMOVE(&status_prompt_history, 0);
} }

21
tmux.c
View File

@ -73,7 +73,7 @@ logfile(const char *name)
if (debug_level > 0) { if (debug_level > 0) {
xasprintf(&path, "tmux-%s-%ld.log", name, (long) getpid()); xasprintf(&path, "tmux-%s-%ld.log", name, (long) getpid());
log_open(debug_level, path); log_open(debug_level, path);
xfree(path); free(path);
} }
} }
@ -252,8 +252,7 @@ main(int argc, char **argv)
flags &= ~IDENTIFY_256COLOURS; flags &= ~IDENTIFY_256COLOURS;
break; break;
case 'c': case 'c':
if (shell_cmd != NULL) free(shell_cmd);
xfree(shell_cmd);
shell_cmd = xstrdup(optarg); shell_cmd = xstrdup(optarg);
break; break;
case 'C': case 'C':
@ -263,24 +262,21 @@ main(int argc, char **argv)
flags |= IDENTIFY_CONTROL; flags |= IDENTIFY_CONTROL;
break; break;
case 'f': case 'f':
if (cfg_file != NULL) free(cfg_file);
xfree(cfg_file);
cfg_file = xstrdup(optarg); cfg_file = xstrdup(optarg);
break; break;
case 'l': case 'l':
login_shell = 1; login_shell = 1;
break; break;
case 'L': case 'L':
if (label != NULL) free(label);
xfree(label);
label = xstrdup(optarg); label = xstrdup(optarg);
break; break;
case 'q': case 'q':
quiet = 1; quiet = 1;
break; break;
case 'S': case 'S':
if (path != NULL) free(path);
xfree(path);
path = xstrdup(optarg); path = xstrdup(optarg);
break; break;
case 'u': case 'u':
@ -360,7 +356,7 @@ main(int argc, char **argv)
} }
xasprintf(&cfg_file, "%s/%s", home, DEFAULT_CFG); xasprintf(&cfg_file, "%s/%s", home, DEFAULT_CFG);
if (access(cfg_file, R_OK) != 0 && errno == ENOENT) { if (access(cfg_file, R_OK) != 0 && errno == ENOENT) {
xfree(cfg_file); free(cfg_file);
cfg_file = NULL; cfg_file = NULL;
} }
} }
@ -387,11 +383,10 @@ main(int argc, char **argv)
} }
} }
} }
if (label != NULL) free(label);
xfree(label);
if (realpath(path, socket_path) == NULL) if (realpath(path, socket_path) == NULL)
strlcpy(socket_path, path, sizeof socket_path); strlcpy(socket_path, path, sizeof socket_path);
xfree(path); free(path);
/* Set process title. */ /* Set process title. */
setproctitle("%s (%s)", __progname, socket_path); setproctitle("%s (%s)", __progname, socket_path);

1
tmux.h
View File

@ -2224,7 +2224,6 @@ char *xstrdup(const char *);
void *xcalloc(size_t, size_t); void *xcalloc(size_t, size_t);
void *xmalloc(size_t); void *xmalloc(size_t);
void *xrealloc(void *, size_t, size_t); void *xrealloc(void *, size_t, size_t);
void xfree(void *);
int printflike2 xasprintf(char **, const char *, ...); int printflike2 xasprintf(char **, const char *, ...);
int xvasprintf(char **, const char *, va_list); int xvasprintf(char **, const char *, va_list);
int printflike3 xsnprintf(char *, size_t, const char *, ...); int printflike3 xsnprintf(char *, size_t, const char *, ...);

View File

@ -384,7 +384,7 @@ tty_keys_free1(struct tty_key *tk)
tty_keys_free1(tk->left); tty_keys_free1(tk->left);
if (tk->right != NULL) if (tk->right != NULL)
tty_keys_free1(tk->right); tty_keys_free1(tk->right);
xfree(tk); free(tk);
} }
/* Lookup a key in the tree. */ /* Lookup a key in the tree. */

View File

@ -252,7 +252,7 @@ tty_term_override(struct tty_term *term, const char *overrides)
*ptr++ = '\0'; *ptr++ = '\0';
val = xstrdup(ptr); val = xstrdup(ptr);
if (strunvis(val, ptr) == -1) { if (strunvis(val, ptr) == -1) {
xfree(val); free(val);
val = xstrdup(ptr); val = xstrdup(ptr);
} }
} else if (entstr[strlen(entstr) - 1] == '@') { } else if (entstr[strlen(entstr) - 1] == '@') {
@ -278,7 +278,7 @@ tty_term_override(struct tty_term *term, const char *overrides)
break; break;
case TTYCODE_STRING: case TTYCODE_STRING:
if (code->type == TTYCODE_STRING) if (code->type == TTYCODE_STRING)
xfree(code->value.string); free(code->value.string);
code->value.string = xstrdup(val); code->value.string = xstrdup(val);
code->type = ent->type; code->type = ent->type;
break; break;
@ -296,12 +296,11 @@ tty_term_override(struct tty_term *term, const char *overrides)
} }
} }
if (val != NULL) free(val);
xfree(val);
} }
} }
xfree(s); free(s);
} }
struct tty_term * struct tty_term *
@ -463,10 +462,10 @@ tty_term_free(struct tty_term *term)
for (i = 0; i < NTTYCODE; i++) { for (i = 0; i < NTTYCODE; i++) {
if (term->codes[i].type == TTYCODE_STRING) if (term->codes[i].type == TTYCODE_STRING)
xfree(term->codes[i].value.string); free(term->codes[i].value.string);
} }
xfree(term->name); free(term->name);
xfree(term); free(term);
} }
int int

10
tty.c
View File

@ -345,11 +345,11 @@ tty_free(struct tty *tty)
{ {
tty_close(tty); tty_close(tty);
xfree(tty->ccolour); free(tty->ccolour);
if (tty->path != NULL) if (tty->path != NULL)
xfree(tty->path); free(tty->path);
if (tty->termname != NULL) if (tty->termname != NULL)
xfree(tty->termname); free(tty->termname);
} }
void void
@ -468,7 +468,7 @@ tty_force_cursor_colour(struct tty *tty, const char *ccolour)
tty_putcode(tty, TTYC_CR); tty_putcode(tty, TTYC_CR);
else else
tty_putcode_ptr1(tty, TTYC_CC, ccolour); tty_putcode_ptr1(tty, TTYC_CC, ccolour);
xfree(tty->ccolour); free(tty->ccolour);
tty->ccolour = xstrdup(ccolour); tty->ccolour = xstrdup(ccolour);
} }
@ -1099,7 +1099,7 @@ tty_cmd_setselection(struct tty *tty, const struct tty_ctx *ctx)
b64_ntop(ctx->ptr, ctx->num, buf, off); b64_ntop(ctx->ptr, ctx->num, buf, off);
tty_putcode_ptr2(tty, TTYC_MS, "", buf); tty_putcode_ptr2(tty, TTYC_MS, "", buf);
xfree(buf); free(buf);
} }
void void

View File

@ -19,6 +19,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "tmux.h" #include "tmux.h"
@ -152,12 +153,12 @@ window_choose_free(struct window_pane *wp)
item = &ARRAY_ITEM(&data->list, i); item = &ARRAY_ITEM(&data->list, i);
if (data->freefn != NULL && item->wcd != NULL) if (data->freefn != NULL && item->wcd != NULL)
data->freefn(item->wcd); data->freefn(item->wcd);
xfree(item->name); free(item->name);
} }
ARRAY_FREE(&data->list); ARRAY_FREE(&data->list);
screen_free(&data->screen); screen_free(&data->screen);
xfree(data); free(data);
} }
void void
@ -493,7 +494,7 @@ window_choose_ctx(struct window_choose_data *cdata)
if (cause != NULL) { if (cause != NULL) {
*cause = toupper((u_char) *cause); *cause = toupper((u_char) *cause);
status_message_set(cdata->client, "%s", cause); status_message_set(cdata->client, "%s", cause);
xfree(cause); free(cause);
} }
return; return;
} }
@ -544,7 +545,7 @@ window_choose_add_window(struct window_pane *wp, struct cmd_ctx *ctx,
xasprintf(&action_data, "%s:%d", s->name, wl->idx); xasprintf(&action_data, "%s:%d", s->name, wl->idx);
wcd->command = cmd_template_replace(action, action_data, 1); wcd->command = cmd_template_replace(action, action_data, 1);
xfree(action_data); free(action_data);
wcd->idx = wl->idx; wcd->idx = wl->idx;
wcd->ft_template = xstrdup(template); wcd->ft_template = xstrdup(template);

View File

@ -18,6 +18,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
@ -69,7 +70,7 @@ window_clock_free(struct window_pane *wp)
struct window_clock_mode_data *data = wp->modedata; struct window_clock_mode_data *data = wp->modedata;
screen_free(&data->screen); screen_free(&data->screen);
xfree(data); free(data);
} }
void void

View File

@ -240,17 +240,16 @@ window_copy_free(struct window_pane *wp)
if (wp->fd != -1) if (wp->fd != -1)
bufferevent_enable(wp->event, EV_READ|EV_WRITE); bufferevent_enable(wp->event, EV_READ|EV_WRITE);
if (data->searchstr != NULL) free(data->searchstr);
xfree(data->searchstr); free(data->inputstr);
xfree(data->inputstr);
if (data->backing != &wp->base) { if (data->backing != &wp->base) {
screen_free(data->backing); screen_free(data->backing);
xfree(data->backing); free(data->backing);
} }
screen_free(&data->screen); screen_free(&data->screen);
xfree(data); free(data);
} }
void void
@ -1379,7 +1378,7 @@ window_copy_copy_selection(struct window_pane *wp, int idx)
/* Don't bother if no data. */ /* Don't bother if no data. */
if (off == 0) { if (off == 0) {
xfree(buf); free(buf);
return; return;
} }
off--; /* remove final \n */ off--; /* remove final \n */

View File

@ -179,9 +179,8 @@ winlink_remove(struct winlinks *wwl, struct winlink *wl)
struct window *w = wl->window; struct window *w = wl->window;
RB_REMOVE(winlinks, wwl, wl); RB_REMOVE(winlinks, wwl, wl);
if (wl->status_text != NULL) free(wl->status_text);
xfree(wl->status_text); free(wl);
xfree(wl);
if (w != NULL) { if (w != NULL) {
if (w->references == 0) if (w->references == 0)
@ -359,16 +358,14 @@ window_destroy(struct window *w)
window_destroy_panes(w); window_destroy_panes(w);
if (w->name != NULL) free(w->name);
xfree(w->name); free(w);
xfree(w);
} }
void void
window_set_name(struct window *w, const char *new_name) window_set_name(struct window *w, const char *new_name)
{ {
if (w->name != NULL) free(w->name);
xfree(w->name);
w->name = xstrdup(new_name); w->name = xstrdup(new_name);
notify_window_renamed(w); notify_window_renamed(w);
} }
@ -671,13 +668,10 @@ window_pane_destroy(struct window_pane *wp)
RB_REMOVE(window_pane_tree, &all_window_panes, wp); RB_REMOVE(window_pane_tree, &all_window_panes, wp);
if (wp->cwd != NULL) free(wp->cwd);
xfree(wp->cwd); free(wp->shell);
if (wp->shell != NULL) free(wp->cmd);
xfree(wp->shell); free(wp);
if (wp->cmd != NULL)
xfree(wp->cmd);
xfree(wp);
} }
int int
@ -694,18 +688,15 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
close(wp->fd); close(wp->fd);
} }
if (cmd != NULL) { if (cmd != NULL) {
if (wp->cmd != NULL) free(wp->cmd);
xfree(wp->cmd);
wp->cmd = xstrdup(cmd); wp->cmd = xstrdup(cmd);
} }
if (shell != NULL) { if (shell != NULL) {
if (wp->shell != NULL) free(wp->shell);
xfree(wp->shell);
wp->shell = xstrdup(shell); wp->shell = xstrdup(shell);
} }
if (cwd != NULL) { if (cwd != NULL) {
if (wp->cwd != NULL) free(wp->cwd);
xfree(wp->cwd);
wp->cwd = xstrdup(cwd); wp->cwd = xstrdup(cwd);
} }
@ -1048,10 +1039,10 @@ window_pane_search(struct window_pane *wp, const char *searchstr, u_int *lineno)
*lineno = i; *lineno = i;
break; break;
} }
xfree(line); free(line);
} }
xfree(newsearchstr); free(newsearchstr);
return (msg); return (msg);
} }

View File

@ -83,14 +83,6 @@ xrealloc(void *oldptr, size_t nmemb, size_t size)
return (newptr); return (newptr);
} }
void
xfree(void *ptr)
{
if (ptr == NULL)
fatalx("null pointer");
free(ptr);
}
int printflike2 int printflike2
xasprintf(char **ret, const char *fmt, ...) xasprintf(char **ret, const char *fmt, ...)
{ {