Skip to content

Commit

Permalink
Memory leaks, from David CARLIER.
Browse files Browse the repository at this point in the history
  • Loading branch information
nicm committed Apr 22, 2017
1 parent c8ecbf3 commit 2c9bdd9
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 14 deletions.
1 change: 1 addition & 0 deletions cmd-load-buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item)
free(pdata);
if (f != NULL)
fclose(f);
free(file);
return (CMD_RETURN_ERROR);
}

Expand Down
1 change: 1 addition & 0 deletions cmd-save-buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item)
if (fwrite(bufdata, 1, bufsize, f) != bufsize) {
cmdq_error(item, "%s: write error", file);
fclose(f);
free(file);
return (CMD_RETURN_ERROR);
}

Expand Down
28 changes: 17 additions & 11 deletions cmd-set-option.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
enum options_table_scope scope;
struct options *oo;
struct options_entry *parent, *o;
const char *name, *value, *target;
char *name;
const char *value, *target;
int window, idx, already, error, ambiguous;
char *cause;

Expand Down Expand Up @@ -121,7 +122,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
return (CMD_RETURN_NORMAL);
cmdq_error(item, "%s", cause);
free(cause);
return (CMD_RETURN_ERROR);
goto fail;
}

/* Which table should this option go into? */
Expand All @@ -136,7 +137,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
cmdq_error(item, "no such session: %s", target);
else
cmdq_error(item, "no current session");
return (CMD_RETURN_ERROR);
goto fail;
} else
oo = s->options;
} else if (scope == OPTIONS_TABLE_WINDOW) {
Expand All @@ -148,7 +149,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
cmdq_error(item, "no such window: %s", target);
else
cmdq_error(item, "no current window");
return (CMD_RETURN_ERROR);
goto fail;
} else
oo = wl->window->options;
}
Expand All @@ -159,7 +160,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
if (idx != -1) {
if (*name == '@' || options_array_size(parent, NULL) == -1) {
cmdq_error(item, "not an array: %s", args->argv[0]);
return (CMD_RETURN_ERROR);
goto fail;
}
}

Expand All @@ -177,14 +178,14 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
if (args_has(args, 'q'))
return (CMD_RETURN_NORMAL);
cmdq_error(item, "already set: %s", args->argv[0]);
return (CMD_RETURN_ERROR);
goto fail;
}
}

/* Change the option. */
if (args_has(args, 'u')) {
if (o == NULL)
return (CMD_RETURN_NORMAL);
goto fail;
if (idx == -1) {
if (oo == global_options ||
oo == global_s_options ||
Expand All @@ -197,17 +198,17 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
} else if (*name == '@') {
if (value == NULL) {
cmdq_error(item, "empty value");
return (CMD_RETURN_ERROR);
goto fail;
}
options_set_string(oo, name, append, "%s", value);
} else if (idx == -1 && options_array_size(parent, NULL) == -1) {
error = cmd_set_option_set(self, item, oo, parent, value);
if (error != 0)
return (CMD_RETURN_ERROR);
goto fail;
} else {
if (value == NULL) {
cmdq_error(item, "empty value");
return (CMD_RETURN_ERROR);
goto fail;
}
if (o == NULL)
o = options_empty(oo, options_table_entry(parent));
Expand All @@ -217,7 +218,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
options_array_assign(o, value);
} else if (options_array_set(o, idx, value, append) != 0) {
cmdq_error(item, "invalid index: %s", args->argv[0]);
return (CMD_RETURN_ERROR);
goto fail;
}
}

Expand Down Expand Up @@ -261,7 +262,12 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
server_redraw_client(c);
}

free(name);
return (CMD_RETURN_NORMAL);

fail:
free(name);
return (CMD_RETURN_ERROR);
}

static int
Expand Down
2 changes: 1 addition & 1 deletion options.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ options_match(const char *s, int *idx, int* ambiguous)

if (*name == '@') {
*ambiguous = 0;
return (xstrdup(name));
return (name);
}

found = NULL;
Expand Down
8 changes: 6 additions & 2 deletions server.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,16 @@ server_create_socket(void)
return (-1);

mask = umask(S_IXUSR|S_IXGRP|S_IRWXO);
if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1)
if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) {
close(fd);
return (-1);
}
umask(mask);

if (listen(fd, 128) == -1)
if (listen(fd, 128) == -1) {
close(fd);
return (-1);
}
setblocking(fd, 0);

return (fd);
Expand Down

0 comments on commit 2c9bdd9

Please sign in to comment.