summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2015-12-21 20:42:08 -0500
committerLibravatar Drew DeVault <sir@cmpwn.com>2015-12-21 20:42:08 -0500
commit91c102a897467ff1bae345458ccf096e32e7bd15 (patch)
tree104c612d08afef1566c9b56f962641bb39c0dc1b
parentMerge pull request #391 from mikkeloscar/trigger-workspace-ipc (diff)
parentreplace non-standard qsort_r with qsort (diff)
downloadsway-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.txt9
-rw-r--r--common/CMakeLists.txt7
-rw-r--r--common/list.c10
-rw-r--r--common/log.c5
-rw-r--r--include/config.h2
-rw-r--r--include/list.h5
-rw-r--r--sway/commands.c12
-rw-r--r--sway/config.c8
-rw-r--r--sway/debug_log.c1
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}\")
9set(CMAKE_C_FLAGS "-g") 9set(CMAKE_C_FLAGS "-g")
10set(CMAKE_C_STANDARD 99) 10set(CMAKE_C_STANDARD 99)
11set(CMAKE_C_EXTENSIONS OFF) 11set(CMAKE_C_EXTENSIONS OFF)
12set(CMAKE_POSITION_INDEPENDENT_CODE ON)
12set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) 13set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
13add_definitions( 14add_definitions(
14 -D_GNU_SOURCE 15 -D_GNU_SOURCE
@@ -58,6 +59,14 @@ find_package(Pango)
58find_package(GdkPixbuf) 59find_package(GdkPixbuf)
59find_package(PAM) 60find_package(PAM)
60 61
62find_package(Backtrace)
63if(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}")
68endif()
69
61include(FeatureSummary) 70include(FeatureSummary)
62include(Manpage) 71include(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
10if(Backtrace_FOUND)
11 set_target_properties(sway-common
12 PROPERTIES
13 COMPILE_FLAGS "-include ${Backtrace_HEADER}"
14 )
15endif()
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 53void list_qsort(list_t* list, int compare(const void *left, const void *right)) {
54static 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
59void 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
63int list_seq_find(list_t *list, int compare(const void *item, const void *data), const void *data) { 57int 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
15int colored = 1; 14int colored = 1;
16log_importance_t loglevel_default = L_ERROR; 15log_importance_t loglevel_default = L_ERROR;
@@ -137,6 +136,7 @@ bool _sway_assert(bool condition, const char* format, ...) {
137} 136}
138 137
139void error_handler(int sig) { 138void 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);
179int workspace_output_cmp_workspace(const void *a, const void *b); 179int workspace_output_cmp_workspace(const void *a, const void *b);
180 180
181int sway_binding_cmp(const void *a, const void *b); 181int sway_binding_cmp(const void *a, const void *b);
182int sway_binding_cmp_qsort(const void *a, const void *b);
182int sway_binding_cmp_keys(const void *a, const void *b); 183int sway_binding_cmp_keys(const void *a, const void *b);
183void free_sway_binding(struct sway_binding *sb); 184void free_sway_binding(struct sway_binding *sb);
184 185
185int sway_mouse_binding_cmp(const void *a, const void *b); 186int sway_mouse_binding_cmp(const void *a, const void *b);
187int sway_mouse_binding_cmp_qsort(const void *a, const void *b);
186int sway_mouse_binding_cmp_buttons(const void *a, const void *b); 188int sway_mouse_binding_cmp_buttons(const void *a, const void *b);
187void free_sway_mouse_binding(struct sway_mouse_binding *smb); 189void 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);
13void list_insert(list_t *list, int index, void *item); 13void list_insert(list_t *list, int index, void *item);
14void list_del(list_t *list, int index); 14void list_del(list_t *list, int index);
15void list_cat(list_t *list, list_t *source); 15void list_cat(list_t *list, list_t *source);
16// See qsort 16// See qsort. Remember to use *_qsort functions as compare functions,
17void list_sort(list_t *list, int compare(const void *left, const void *right)); 17// because they dereference the left and right arguments first!
18void 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.
20int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to); 21int 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
1269static int compare_set(const void *_l, const void *_r) { 1269static 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
645int sway_binding_cmp_qsort(const void *a, const void *b) {
646 return sway_binding_cmp(*(void **)a, *(void **)b);
647}
648
645void free_sway_binding(struct sway_binding *binding) { 649void 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
682int sway_mouse_binding_cmp_qsort(const void *a, const void *b) {
683 return sway_mouse_binding_cmp(*(void **)a, *(void **)b);
684}
685
678void free_sway_mouse_binding(struct sway_mouse_binding *binding) { 686void 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
16extern log_importance_t v; 15extern log_importance_t v;