diff options
author | Drew DeVault <sir@cmpwn.com> | 2015-12-21 20:42:08 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2015-12-21 20:42:08 -0500 |
commit | 91c102a897467ff1bae345458ccf096e32e7bd15 (patch) | |
tree | 104c612d08afef1566c9b56f962641bb39c0dc1b | |
parent | Merge pull request #391 from mikkeloscar/trigger-workspace-ipc (diff) | |
parent | replace non-standard qsort_r with qsort (diff) | |
download | sway-91c102a897467ff1bae345458ccf096e32e7bd15.tar.gz sway-91c102a897467ff1bae345458ccf096e32e7bd15.tar.zst sway-91c102a897467ff1bae345458ccf096e32e7bd15.zip |
Merge pull request #393 from robotanarchy/musl-libc-compatibility
musl libc compatibility
-rw-r--r-- | CMakeLists.txt | 9 | ||||
-rw-r--r-- | common/CMakeLists.txt | 7 | ||||
-rw-r--r-- | common/list.c | 10 | ||||
-rw-r--r-- | common/log.c | 5 | ||||
-rw-r--r-- | include/config.h | 2 | ||||
-rw-r--r-- | include/list.h | 5 | ||||
-rw-r--r-- | sway/commands.c | 12 | ||||
-rw-r--r-- | sway/config.c | 8 | ||||
-rw-r--r-- | sway/debug_log.c | 1 |
9 files changed, 41 insertions, 18 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd9c67b..4c349865 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
@@ -9,6 +9,7 @@ add_definitions(-DFALLBACK_CONFIG_DIR=\"${FALLBACK_CONFIG_DIR}\") | |||
9 | set(CMAKE_C_FLAGS "-g") | 9 | set(CMAKE_C_FLAGS "-g") |
10 | set(CMAKE_C_STANDARD 99) | 10 | set(CMAKE_C_STANDARD 99) |
11 | set(CMAKE_C_EXTENSIONS OFF) | 11 | set(CMAKE_C_EXTENSIONS OFF) |
12 | set(CMAKE_POSITION_INDEPENDENT_CODE ON) | ||
12 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) | 13 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) |
13 | add_definitions( | 14 | add_definitions( |
14 | -D_GNU_SOURCE | 15 | -D_GNU_SOURCE |
@@ -58,6 +59,14 @@ find_package(Pango) | |||
58 | find_package(GdkPixbuf) | 59 | find_package(GdkPixbuf) |
59 | find_package(PAM) | 60 | find_package(PAM) |
60 | 61 | ||
62 | find_package(Backtrace) | ||
63 | if(Backtrace_FOUND) | ||
64 | include_directories("${Backtrace_INCLUDE_DIRS}") | ||
65 | add_definitions(-DSWAY_Backtrace_FOUND=1) | ||
66 | set(LINK_LIBRARIES, "${LINK_LIBRARIES} ${Backtrace_LIBRARIES}") | ||
67 | set(SWAY_Backtrace_HEADER "${Backtrace_HEADER}") | ||
68 | endif() | ||
69 | |||
61 | include(FeatureSummary) | 70 | include(FeatureSummary) |
62 | include(Manpage) | 71 | include(Manpage) |
63 | 72 | ||
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index a40f096d..38767249 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt | |||
@@ -6,3 +6,10 @@ add_library(sway-common | |||
6 | readline.c | 6 | readline.c |
7 | stringop.c | 7 | stringop.c |
8 | ) | 8 | ) |
9 | |||
10 | if(Backtrace_FOUND) | ||
11 | set_target_properties(sway-common | ||
12 | PROPERTIES | ||
13 | COMPILE_FLAGS "-include ${Backtrace_HEADER}" | ||
14 | ) | ||
15 | endif() | ||
diff --git a/common/list.c b/common/list.c index d6f6f2ea..850c8569 100644 --- a/common/list.c +++ b/common/list.c | |||
@@ -50,14 +50,8 @@ void list_cat(list_t *list, list_t *source) { | |||
50 | } | 50 | } |
51 | } | 51 | } |
52 | 52 | ||
53 | // pass the pointer of the object we care about to the comparison function | 53 | void list_qsort(list_t* list, int compare(const void *left, const void *right)) { |
54 | static int list_cmp(const void *l, const void *r, void *_cmp) { | 54 | qsort(list->items, list->length, sizeof(void *), compare); |
55 | int (*cmp)(const void *, const void *) = _cmp; | ||
56 | return cmp(*(void**)l, *(void**)r); | ||
57 | } | ||
58 | |||
59 | void list_sort(list_t *list, int compare(const void *left, const void *right)) { | ||
60 | qsort_r(list->items, list->length, sizeof(void *), list_cmp, compare); | ||
61 | } | 55 | } |
62 | 56 | ||
63 | int list_seq_find(list_t *list, int compare(const void *item, const void *data), const void *data) { | 57 | int list_seq_find(list_t *list, int compare(const void *item, const void *data), const void *data) { |
diff --git a/common/log.c b/common/log.c index 02aac4c1..f9242bf4 100644 --- a/common/log.c +++ b/common/log.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <errno.h> | 10 | #include <errno.h> |
11 | #include <string.h> | 11 | #include <string.h> |
12 | #include <stringop.h> | 12 | #include <stringop.h> |
13 | #include <execinfo.h> | ||
14 | 13 | ||
15 | int colored = 1; | 14 | int colored = 1; |
16 | log_importance_t loglevel_default = L_ERROR; | 15 | log_importance_t loglevel_default = L_ERROR; |
@@ -137,6 +136,7 @@ bool _sway_assert(bool condition, const char* format, ...) { | |||
137 | } | 136 | } |
138 | 137 | ||
139 | void error_handler(int sig) { | 138 | void error_handler(int sig) { |
139 | #if SWAY_Backtrace_FOUND | ||
140 | int i; | 140 | int i; |
141 | int max_lines = 20; | 141 | int max_lines = 20; |
142 | void *array[max_lines]; | 142 | void *array[max_lines]; |
@@ -155,5 +155,8 @@ void error_handler(int sig) { | |||
155 | for (i = 0; (size_t)i < bt_len; i++) { | 155 | for (i = 0; (size_t)i < bt_len; i++) { |
156 | sway_log(L_ERROR, "Backtrace: %s", bt[i]); | 156 | sway_log(L_ERROR, "Backtrace: %s", bt[i]); |
157 | } | 157 | } |
158 | #else | ||
159 | sway_log(L_ERROR, "Error: Signal %d.", sig); | ||
160 | #endif | ||
158 | exit(1); | 161 | exit(1); |
159 | } | 162 | } |
diff --git a/include/config.h b/include/config.h index b97acb57..a915fbed 100644 --- a/include/config.h +++ b/include/config.h | |||
@@ -179,10 +179,12 @@ void free_output_config(struct output_config *oc); | |||
179 | int workspace_output_cmp_workspace(const void *a, const void *b); | 179 | int workspace_output_cmp_workspace(const void *a, const void *b); |
180 | 180 | ||
181 | int sway_binding_cmp(const void *a, const void *b); | 181 | int sway_binding_cmp(const void *a, const void *b); |
182 | int sway_binding_cmp_qsort(const void *a, const void *b); | ||
182 | int sway_binding_cmp_keys(const void *a, const void *b); | 183 | int sway_binding_cmp_keys(const void *a, const void *b); |
183 | void free_sway_binding(struct sway_binding *sb); | 184 | void free_sway_binding(struct sway_binding *sb); |
184 | 185 | ||
185 | int sway_mouse_binding_cmp(const void *a, const void *b); | 186 | int sway_mouse_binding_cmp(const void *a, const void *b); |
187 | int sway_mouse_binding_cmp_qsort(const void *a, const void *b); | ||
186 | int sway_mouse_binding_cmp_buttons(const void *a, const void *b); | 188 | int sway_mouse_binding_cmp_buttons(const void *a, const void *b); |
187 | void free_sway_mouse_binding(struct sway_mouse_binding *smb); | 189 | void free_sway_mouse_binding(struct sway_mouse_binding *smb); |
188 | 190 | ||
diff --git a/include/list.h b/include/list.h index 90d0ad36..d18d3f54 100644 --- a/include/list.h +++ b/include/list.h | |||
@@ -13,8 +13,9 @@ void list_add(list_t *list, void *item); | |||
13 | void list_insert(list_t *list, int index, void *item); | 13 | void list_insert(list_t *list, int index, void *item); |
14 | void list_del(list_t *list, int index); | 14 | void list_del(list_t *list, int index); |
15 | void list_cat(list_t *list, list_t *source); | 15 | void list_cat(list_t *list, list_t *source); |
16 | // See qsort | 16 | // See qsort. Remember to use *_qsort functions as compare functions, |
17 | void list_sort(list_t *list, int compare(const void *left, const void *right)); | 17 | // because they dereference the left and right arguments first! |
18 | void list_qsort(list_t *list, int compare(const void *left, const void *right)); | ||
18 | // Return index for first item in list that returns 0 for given compare | 19 | // Return index for first item in list that returns 0 for given compare |
19 | // function or -1 if none matches. | 20 | // function or -1 if none matches. |
20 | int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to); | 21 | int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to); |
diff --git a/sway/commands.c b/sway/commands.c index 93c74915..b1b1c5b6 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -220,7 +220,7 @@ static struct cmd_results *cmd_bindsym(int argc, char **argv) { | |||
220 | } | 220 | } |
221 | binding->order = binding_order++; | 221 | binding->order = binding_order++; |
222 | list_add(mode->bindings, binding); | 222 | list_add(mode->bindings, binding); |
223 | list_sort(mode->bindings, sway_binding_cmp); | 223 | list_qsort(mode->bindings, sway_binding_cmp_qsort); |
224 | 224 | ||
225 | sway_log(L_DEBUG, "bindsym - Bound %s to command %s", argv[0], binding->command); | 225 | sway_log(L_DEBUG, "bindsym - Bound %s to command %s", argv[0], binding->command); |
226 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 226 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
@@ -1266,9 +1266,9 @@ static struct cmd_results *cmd_scratchpad(int argc, char **argv) { | |||
1266 | } | 1266 | } |
1267 | 1267 | ||
1268 | // sort in order of longest->shortest | 1268 | // sort in order of longest->shortest |
1269 | static int compare_set(const void *_l, const void *_r) { | 1269 | static int compare_set_qsort(const void *_l, const void *_r) { |
1270 | struct sway_variable const *l = _l; | 1270 | struct sway_variable const *l = *(void **)_l; |
1271 | struct sway_variable const *r = _r; | 1271 | struct sway_variable const *r = *(void **)_r; |
1272 | return strlen(r->name) - strlen(l->name); | 1272 | return strlen(r->name) - strlen(l->name); |
1273 | } | 1273 | } |
1274 | 1274 | ||
@@ -1295,7 +1295,7 @@ static struct cmd_results *cmd_set(int argc, char **argv) { | |||
1295 | var = malloc(sizeof(struct sway_variable)); | 1295 | var = malloc(sizeof(struct sway_variable)); |
1296 | var->name = strdup(argv[0]); | 1296 | var->name = strdup(argv[0]); |
1297 | list_add(config->symbols, var); | 1297 | list_add(config->symbols, var); |
1298 | list_sort(config->symbols, compare_set); | 1298 | list_qsort(config->symbols, compare_set_qsort); |
1299 | } | 1299 | } |
1300 | var->value = join_args(argv + 1, argc - 1); | 1300 | var->value = join_args(argv + 1, argc - 1); |
1301 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 1301 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
@@ -1631,7 +1631,7 @@ static struct cmd_results *bar_cmd_bindsym(int argc, char **argv) { | |||
1631 | list_del(bar->bindings, i); | 1631 | list_del(bar->bindings, i); |
1632 | } | 1632 | } |
1633 | list_add(bar->bindings, binding); | 1633 | list_add(bar->bindings, binding); |
1634 | list_sort(bar->bindings, sway_mouse_binding_cmp); | 1634 | list_qsort(bar->bindings, sway_mouse_binding_cmp_qsort); |
1635 | 1635 | ||
1636 | sway_log(L_DEBUG, "bindsym - Bound %s to command %s when clicking swaybar", argv[0], binding->command); | 1636 | sway_log(L_DEBUG, "bindsym - Bound %s to command %s when clicking swaybar", argv[0], binding->command); |
1637 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 1637 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
diff --git a/sway/config.c b/sway/config.c index 257bb872..853a7111 100644 --- a/sway/config.c +++ b/sway/config.c | |||
@@ -642,6 +642,10 @@ int sway_binding_cmp(const void *a, const void *b) { | |||
642 | return lenient_strcmp(binda->command, bindb->command); | 642 | return lenient_strcmp(binda->command, bindb->command); |
643 | } | 643 | } |
644 | 644 | ||
645 | int sway_binding_cmp_qsort(const void *a, const void *b) { | ||
646 | return sway_binding_cmp(*(void **)a, *(void **)b); | ||
647 | } | ||
648 | |||
645 | void free_sway_binding(struct sway_binding *binding) { | 649 | void free_sway_binding(struct sway_binding *binding) { |
646 | if (binding->keys) { | 650 | if (binding->keys) { |
647 | for (int i = 0; i < binding->keys->length; i++) { | 651 | for (int i = 0; i < binding->keys->length; i++) { |
@@ -675,6 +679,10 @@ int sway_mouse_binding_cmp(const void *a, const void *b) { | |||
675 | return lenient_strcmp(binda->command, bindb->command); | 679 | return lenient_strcmp(binda->command, bindb->command); |
676 | } | 680 | } |
677 | 681 | ||
682 | int sway_mouse_binding_cmp_qsort(const void *a, const void *b) { | ||
683 | return sway_mouse_binding_cmp(*(void **)a, *(void **)b); | ||
684 | } | ||
685 | |||
678 | void free_sway_mouse_binding(struct sway_mouse_binding *binding) { | 686 | void free_sway_mouse_binding(struct sway_mouse_binding *binding) { |
679 | if (binding->command) { | 687 | if (binding->command) { |
680 | free(binding->command); | 688 | free(binding->command); |
diff --git a/sway/debug_log.c b/sway/debug_log.c index 8b30ed45..6fd6422f 100644 --- a/sway/debug_log.c +++ b/sway/debug_log.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <errno.h> | 10 | #include <errno.h> |
11 | #include <string.h> | 11 | #include <string.h> |
12 | #include <stringop.h> | 12 | #include <stringop.h> |
13 | #include <execinfo.h> | ||
14 | #include "workspace.h" | 13 | #include "workspace.h" |
15 | 14 | ||
16 | extern log_importance_t v; | 15 | extern log_importance_t v; |