config: leak sanitizer pass

Add free for everything that's implemented right now.
Will need to add more as the implementations are re-added.
master
Dominique Martinet 7 years ago
parent f5b33cb4b6
commit 9a326be7f8

@ -31,8 +31,79 @@
struct sway_config *config = NULL; struct sway_config *config = NULL;
static void free_binding(struct sway_binding *bind) {
if (!bind) {
return;
}
free_flat_list(bind->keys);
free(bind->command);
free(bind);
}
static void free_mode(struct sway_mode *mode) {
int i;
if (!mode) {
return;
}
free(mode->name);
if (mode->keysym_bindings) {
for (i = 0; i < mode->keysym_bindings->length; i++) {
free_binding(mode->keysym_bindings->items[i]);
}
list_free(mode->keysym_bindings);
}
if (mode->keycode_bindings) {
for (i = 0; i < mode->keycode_bindings->length; i++) {
free_binding(mode->keycode_bindings->items[i]);
}
list_free(mode->keycode_bindings);
}
free(mode);
}
void free_config(struct sway_config *config) { void free_config(struct sway_config *config) {
// TODO int i;
if (!config) {
return;
}
// TODO: handle all currently unhandled lists as we add implementations
list_free(config->symbols);
if (config->modes) {
for (i = 0; i < config->modes->length; i++) {
free_mode(config->modes->items[i]);
}
list_free(config->modes);
}
list_free(config->bars);
list_free(config->cmd_queue);
list_free(config->workspace_outputs);
list_free(config->pid_workspaces);
list_free(config->output_configs);
if (config->input_configs) {
for (i = 0; i < config->input_configs->length; i++) {
free_input_config(config->input_configs->items[i]);
}
list_free(config->input_configs);
}
list_free(config->seat_configs);
list_free(config->criteria);
list_free(config->no_focus);
list_free(config->active_bar_modifiers);
list_free(config->config_chain);
list_free(config->command_policies);
list_free(config->feature_policies);
list_free(config->ipc_policies);
free(config->current_bar);
free(config->floating_scroll_up_cmd);
free(config->floating_scroll_down_cmd);
free(config->floating_scroll_left_cmd);
free(config->floating_scroll_right_cmd);
free(config->font);
free((char *)config->current_config);
free(config);
} }
static void config_defaults(struct sway_config *config) { static void config_defaults(struct sway_config *config) {
@ -186,6 +257,7 @@ static char *get_config_path(void) {
if (file_exists(path)) { if (file_exists(path)) {
return path; return path;
} }
free(path);
} }
} }
@ -524,6 +596,7 @@ bool read_config(FILE *file, struct sway_config *config) {
case CMD_BLOCK_INPUT: case CMD_BLOCK_INPUT:
sway_log(L_DEBUG, "End of input block"); sway_log(L_DEBUG, "End of input block");
free_input_config(current_input_config);
current_input_config = NULL; current_input_config = NULL;
block = CMD_BLOCK_END; block = CMD_BLOCK_END;
break; break;

Loading…
Cancel
Save