diff options
-rw-r--r-- | common/list.c | 21 | ||||
-rw-r--r-- | common/loop.c | 6 | ||||
-rw-r--r-- | common/stringop.c | 8 | ||||
-rw-r--r-- | include/list.h | 7 | ||||
-rw-r--r-- | include/stringop.h | 1 | ||||
-rw-r--r-- | sway/commands/bind.c | 4 | ||||
-rw-r--r-- | sway/commands/reload.c | 7 | ||||
-rw-r--r-- | sway/config.c | 9 | ||||
-rw-r--r-- | sway/config/bar.c | 4 | ||||
-rw-r--r-- | sway/tree/container.c | 8 | ||||
-rw-r--r-- | swayidle/main.c | 19 |
11 files changed, 39 insertions, 55 deletions
diff --git a/common/list.c b/common/list.c index ee268c9a..a0b42512 100644 --- a/common/list.c +++ b/common/list.c | |||
@@ -30,15 +30,6 @@ void list_free(list_t *list) { | |||
30 | free(list); | 30 | free(list); |
31 | } | 31 | } |
32 | 32 | ||
33 | void list_foreach(list_t *list, void (*callback)(void *item)) { | ||
34 | if (list == NULL || callback == NULL) { | ||
35 | return; | ||
36 | } | ||
37 | for (int i = 0; i < list->length; i++) { | ||
38 | callback(list->items[i]); | ||
39 | } | ||
40 | } | ||
41 | |||
42 | void list_add(list_t *list, void *item) { | 33 | void list_add(list_t *list, void *item) { |
43 | list_resize(list); | 34 | list_resize(list); |
44 | list->items[list->length++] = item; | 35 | list->items[list->length++] = item; |
@@ -156,3 +147,15 @@ void list_stable_sort(list_t *list, int compare(const void *a, const void *b)) { | |||
156 | list_inplace_sort(list, 0, list->length - 1, compare); | 147 | list_inplace_sort(list, 0, list->length - 1, compare); |
157 | } | 148 | } |
158 | } | 149 | } |
150 | |||
151 | void free_flat_list(list_t *list) { | ||
152 | if (!list) { | ||
153 | return; | ||
154 | } | ||
155 | |||
156 | for (int i = 0; i < list->length; ++i) { | ||
157 | free(list->items[i]); | ||
158 | } | ||
159 | list_free(list); | ||
160 | } | ||
161 | |||
diff --git a/common/loop.c b/common/loop.c index 82b80017..ad2b4a64 100644 --- a/common/loop.c +++ b/common/loop.c | |||
@@ -45,10 +45,8 @@ struct loop *loop_create(void) { | |||
45 | } | 45 | } |
46 | 46 | ||
47 | void loop_destroy(struct loop *loop) { | 47 | void loop_destroy(struct loop *loop) { |
48 | list_foreach(loop->fd_events, free); | 48 | free_flat_list(loop->fd_events); |
49 | list_foreach(loop->timers, free); | 49 | free_flat_list(loop->timers); |
50 | list_free(loop->fd_events); | ||
51 | list_free(loop->timers); | ||
52 | free(loop->fds); | 50 | free(loop->fds); |
53 | free(loop); | 51 | free(loop); |
54 | } | 52 | } |
diff --git a/common/stringop.c b/common/stringop.c index df016e9d..4b8c9a38 100644 --- a/common/stringop.c +++ b/common/stringop.c | |||
@@ -97,14 +97,6 @@ list_t *split_string(const char *str, const char *delims) { | |||
97 | return res; | 97 | return res; |
98 | } | 98 | } |
99 | 99 | ||
100 | void free_flat_list(list_t *list) { | ||
101 | int i; | ||
102 | for (i = 0; i < list->length; ++i) { | ||
103 | free(list->items[i]); | ||
104 | } | ||
105 | list_free(list); | ||
106 | } | ||
107 | |||
108 | char **split_args(const char *start, int *argc) { | 100 | char **split_args(const char *start, int *argc) { |
109 | *argc = 0; | 101 | *argc = 0; |
110 | int alloc = 2; | 102 | int alloc = 2; |
diff --git a/include/list.h b/include/list.h index 03851a82..70af49f6 100644 --- a/include/list.h +++ b/include/list.h | |||
@@ -9,7 +9,6 @@ typedef struct { | |||
9 | 9 | ||
10 | list_t *create_list(void); | 10 | list_t *create_list(void); |
11 | void list_free(list_t *list); | 11 | void list_free(list_t *list); |
12 | void list_foreach(list_t *list, void (*callback)(void* item)); | ||
13 | void list_add(list_t *list, void *item); | 12 | void list_add(list_t *list, void *item); |
14 | void list_insert(list_t *list, int index, void *item); | 13 | void list_insert(list_t *list, int index, void *item); |
15 | void list_del(list_t *list, int index); | 14 | void list_del(list_t *list, int index); |
@@ -27,4 +26,10 @@ void list_stable_sort(list_t *list, int compare(const void *a, const void *b)); | |||
27 | void list_swap(list_t *list, int src, int dest); | 26 | void list_swap(list_t *list, int src, int dest); |
28 | // move item to end of list | 27 | // move item to end of list |
29 | void list_move_to_end(list_t *list, void *item); | 28 | void list_move_to_end(list_t *list, void *item); |
29 | |||
30 | /* Calls `free` for each item in the list, then frees the list. | ||
31 | * Do not use this to free lists of primitives or items that require more | ||
32 | * complicated deallocation code. | ||
33 | */ | ||
34 | void free_flat_list(list_t *list); | ||
30 | #endif | 35 | #endif |
diff --git a/include/stringop.h b/include/stringop.h index 919e605c..215f7916 100644 --- a/include/stringop.h +++ b/include/stringop.h | |||
@@ -19,7 +19,6 @@ int lenient_strcmp(char *a, char *b); | |||
19 | 19 | ||
20 | // Simply split a string with delims, free with `free_flat_list` | 20 | // Simply split a string with delims, free with `free_flat_list` |
21 | list_t *split_string(const char *str, const char *delims); | 21 | list_t *split_string(const char *str, const char *delims); |
22 | void free_flat_list(list_t *list); | ||
23 | 22 | ||
24 | // Splits an argument string, keeping quotes intact | 23 | // Splits an argument string, keeping quotes intact |
25 | char **split_args(const char *str, int *argc); | 24 | char **split_args(const char *str, int *argc); |
diff --git a/sway/commands/bind.c b/sway/commands/bind.c index c8b634b9..52a245fa 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c | |||
@@ -23,9 +23,7 @@ void free_sway_binding(struct sway_binding *binding) { | |||
23 | return; | 23 | return; |
24 | } | 24 | } |
25 | 25 | ||
26 | if (binding->keys) { | 26 | free_flat_list(binding->keys); |
27 | free_flat_list(binding->keys); | ||
28 | } | ||
29 | free(binding->input); | 27 | free(binding->input); |
30 | free(binding->command); | 28 | free(binding->command); |
31 | free(binding); | 29 | free(binding); |
diff --git a/sway/commands/reload.c b/sway/commands/reload.c index c64de4bd..c236911e 100644 --- a/sway/commands/reload.c +++ b/sway/commands/reload.c | |||
@@ -24,8 +24,7 @@ static void do_reload(void *data) { | |||
24 | 24 | ||
25 | if (!load_main_config(config->current_config_path, true, false)) { | 25 | if (!load_main_config(config->current_config_path, true, false)) { |
26 | wlr_log(WLR_ERROR, "Error(s) reloading config"); | 26 | wlr_log(WLR_ERROR, "Error(s) reloading config"); |
27 | list_foreach(bar_ids, free); | 27 | free_flat_list(bar_ids); |
28 | list_free(bar_ids); | ||
29 | return; | 28 | return; |
30 | } | 29 | } |
31 | 30 | ||
@@ -42,9 +41,7 @@ static void do_reload(void *data) { | |||
42 | } | 41 | } |
43 | } | 42 | } |
44 | } | 43 | } |
45 | 44 | free_flat_list(bar_ids); | |
46 | list_foreach(bar_ids, free); | ||
47 | list_free(bar_ids); | ||
48 | 45 | ||
49 | config_update_font_height(true); | 46 | config_update_font_height(true); |
50 | root_for_each_container(rebuild_textures_iterator, NULL); | 47 | root_for_each_container(rebuild_textures_iterator, NULL); |
diff --git a/sway/config.c b/sway/config.c index ff7de4b9..efb95e31 100644 --- a/sway/config.c +++ b/sway/config.c | |||
@@ -654,8 +654,7 @@ bool read_config(FILE *file, struct sway_config *config, | |||
654 | 654 | ||
655 | if (read + length > config_size) { | 655 | if (read + length > config_size) { |
656 | wlr_log(WLR_ERROR, "Config file changed during reading"); | 656 | wlr_log(WLR_ERROR, "Config file changed during reading"); |
657 | list_foreach(stack, free); | 657 | free_flat_list(stack); |
658 | list_free(stack); | ||
659 | free(line); | 658 | free(line); |
660 | return false; | 659 | return false; |
661 | } | 660 | } |
@@ -684,8 +683,7 @@ bool read_config(FILE *file, struct sway_config *config, | |||
684 | } | 683 | } |
685 | char *expanded = expand_line(block, line, brace_detected > 0); | 684 | char *expanded = expand_line(block, line, brace_detected > 0); |
686 | if (!expanded) { | 685 | if (!expanded) { |
687 | list_foreach(stack, free); | 686 | free_flat_list(stack); |
688 | list_free(stack); | ||
689 | free(line); | 687 | free(line); |
690 | return false; | 688 | return false; |
691 | } | 689 | } |
@@ -750,8 +748,7 @@ bool read_config(FILE *file, struct sway_config *config, | |||
750 | free(line); | 748 | free(line); |
751 | free_cmd_results(res); | 749 | free_cmd_results(res); |
752 | } | 750 | } |
753 | list_foreach(stack, free); | 751 | free_flat_list(stack); |
754 | list_free(stack); | ||
755 | config->current_config_line_number = 0; | 752 | config->current_config_line_number = 0; |
756 | config->current_config_line = NULL; | 753 | config->current_config_line = NULL; |
757 | 754 | ||
diff --git a/sway/config/bar.c b/sway/config/bar.c index 36e10527..82457ef4 100644 --- a/sway/config/bar.c +++ b/sway/config/bar.c | |||
@@ -53,9 +53,7 @@ void free_bar_config(struct bar_config *bar) { | |||
53 | free_bar_binding(binding); | 53 | free_bar_binding(binding); |
54 | } | 54 | } |
55 | list_free(bar->bindings); | 55 | list_free(bar->bindings); |
56 | if (bar->outputs) { | 56 | free_flat_list(bar->outputs); |
57 | free_flat_list(bar->outputs); | ||
58 | } | ||
59 | if (bar->pid != 0) { | 57 | if (bar->pid != 0) { |
60 | terminate_swaybar(bar->pid); | 58 | terminate_swaybar(bar->pid); |
61 | } | 59 | } |
diff --git a/sway/tree/container.c b/sway/tree/container.c index 91e8dd7f..ac433577 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "sway/tree/arrange.h" | 21 | #include "sway/tree/arrange.h" |
22 | #include "sway/tree/view.h" | 22 | #include "sway/tree/view.h" |
23 | #include "sway/tree/workspace.h" | 23 | #include "sway/tree/workspace.h" |
24 | #include "list.h" | ||
24 | #include "log.h" | 25 | #include "log.h" |
25 | #include "stringop.h" | 26 | #include "stringop.h" |
26 | 27 | ||
@@ -67,8 +68,7 @@ void container_destroy(struct sway_container *con) { | |||
67 | list_free(con->current.children); | 68 | list_free(con->current.children); |
68 | list_free(con->outputs); | 69 | list_free(con->outputs); |
69 | 70 | ||
70 | list_foreach(con->marks, free); | 71 | free_flat_list(con->marks); |
71 | list_free(con->marks); | ||
72 | wlr_texture_destroy(con->marks_focused); | 72 | wlr_texture_destroy(con->marks_focused); |
73 | wlr_texture_destroy(con->marks_focused_inactive); | 73 | wlr_texture_destroy(con->marks_focused_inactive); |
74 | wlr_texture_destroy(con->marks_unfocused); | 74 | wlr_texture_destroy(con->marks_unfocused); |
@@ -1267,7 +1267,9 @@ bool container_find_and_unmark(char *mark) { | |||
1267 | } | 1267 | } |
1268 | 1268 | ||
1269 | void container_clear_marks(struct sway_container *con) { | 1269 | void container_clear_marks(struct sway_container *con) { |
1270 | list_foreach(con->marks, free); | 1270 | for (int i = 0; i < con->marks->length; ++i) { |
1271 | free(con->marks->items[i]); | ||
1272 | } | ||
1271 | con->marks->length = 0; | 1273 | con->marks->length = 0; |
1272 | ipc_event_window(con, "mark"); | 1274 | ipc_event_window(con, "mark"); |
1273 | } | 1275 | } |
diff --git a/swayidle/main.c b/swayidle/main.c index dd7d9de3..9a76e58c 100644 --- a/swayidle/main.c +++ b/swayidle/main.c | |||
@@ -365,11 +365,6 @@ static int parse_args(int argc, char *argv[]) { | |||
365 | return 0; | 365 | return 0; |
366 | } | 366 | } |
367 | 367 | ||
368 | static void register_zero_idle_timeout(void *item) { | ||
369 | struct swayidle_timeout_cmd *cmd = item; | ||
370 | register_timeout(cmd, 0); | ||
371 | } | ||
372 | |||
373 | static int handle_signal(int sig, void *data) { | 368 | static int handle_signal(int sig, void *data) { |
374 | switch (sig) { | 369 | switch (sig) { |
375 | case SIGINT: | 370 | case SIGINT: |
@@ -378,7 +373,9 @@ static int handle_signal(int sig, void *data) { | |||
378 | return 0; | 373 | return 0; |
379 | case SIGUSR1: | 374 | case SIGUSR1: |
380 | wlr_log(WLR_DEBUG, "Got SIGUSR1"); | 375 | wlr_log(WLR_DEBUG, "Got SIGUSR1"); |
381 | list_foreach(state.timeout_cmds, register_zero_idle_timeout); | 376 | for (int i = 0; i < state.timeout_cmds->length; ++i) { |
377 | register_timeout(state.timeout_cmds->items[i], 0); | ||
378 | } | ||
382 | return 1; | 379 | return 1; |
383 | } | 380 | } |
384 | assert(false); // not reached | 381 | assert(false); // not reached |
@@ -409,11 +406,6 @@ static int display_event(int fd, uint32_t mask, void *data) { | |||
409 | return count; | 406 | return count; |
410 | } | 407 | } |
411 | 408 | ||
412 | static void register_idle_timeout(void *item) { | ||
413 | struct swayidle_timeout_cmd *cmd = item; | ||
414 | register_timeout(cmd, cmd->timeout); | ||
415 | } | ||
416 | |||
417 | int main(int argc, char *argv[]) { | 409 | int main(int argc, char *argv[]) { |
418 | if (parse_args(argc, argv) != 0) { | 410 | if (parse_args(argc, argv) != 0) { |
419 | return -1; | 411 | return -1; |
@@ -458,7 +450,10 @@ int main(int argc, char *argv[]) { | |||
458 | sway_terminate(0); | 450 | sway_terminate(0); |
459 | } | 451 | } |
460 | 452 | ||
461 | list_foreach(state.timeout_cmds, register_idle_timeout); | 453 | for (int i = 0; i < state.timeout_cmds->length; ++i) { |
454 | struct swayidle_timeout_cmd *cmd = state.timeout_cmds->items[i]; | ||
455 | register_timeout(cmd, cmd->timeout); | ||
456 | } | ||
462 | 457 | ||
463 | wl_display_roundtrip(state.display); | 458 | wl_display_roundtrip(state.display); |
464 | 459 | ||