diff options
Diffstat (limited to 'meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch')
-rw-r--r-- | meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch | 112 |
1 files changed, 53 insertions, 59 deletions
diff --git a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch index 4cdf66e767..5027682df2 100644 --- a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch +++ b/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch @@ -1,4 +1,4 @@ -From 159c53612444ec1df492bae528a5a88a275b93bf Mon Sep 17 00:00:00 2001 +From 5d730902f47498a2866b46875352f6810a01d67c Mon Sep 17 00:00:00 2001 From: Chen Qi <Qi.Chen@windriver.com> Date: Mon, 25 Feb 2019 13:41:41 +0800 Subject: [PATCH] don't use glibc-specific qsort_r @@ -14,20 +14,18 @@ Signed-off-by: Andrej Valek <andrej.valek@siemens.com> Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com> --- - src/basic/sort-util.h | 14 ------------ - src/libsystemd/sd-hwdb/hwdb-util.c | 19 +++++++++++----- - src/shared/format-table.c | 36 ++++++++++++++++++++---------- + src/basic/sort-util.h | 14 -------------- + src/shared/format-table.c | 36 ++++++++++++++++++++++++------------ + src/shared/hwdb-util.c | 19 ++++++++++++++----- 3 files changed, 38 insertions(+), 31 deletions(-) -diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h -index 49586a4a24..d92a5ab0ed 100644 --- a/src/basic/sort-util.h +++ b/src/basic/sort-util.h -@@ -55,18 +55,4 @@ static inline void _qsort_safe(void *base, size_t nmemb, size_t size, __compar_f - _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \ +@@ -61,18 +61,4 @@ static inline void _qsort_safe(void *bas + _qsort_safe((p), (n), sizeof((p)[0]), (comparison_fn_t) _func_); \ }) --static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, __compar_d_fn_t compar, void *userdata) { +-static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, comparison_userdata_fn_t compar, void *userdata) { - if (nmemb <= 1) - return; - @@ -38,59 +36,13 @@ index 49586a4a24..d92a5ab0ed 100644 -#define typesafe_qsort_r(p, n, func, userdata) \ - ({ \ - int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \ -- qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \ +- qsort_r_safe((p), (n), sizeof((p)[0]), (comparison_userdata_fn_t) _func_, userdata); \ - }) - int cmp_int(const int *a, const int *b); -diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/libsystemd/sd-hwdb/hwdb-util.c -index fd45ff0f54..ac4b63c49b 100644 ---- a/src/libsystemd/sd-hwdb/hwdb-util.c -+++ b/src/libsystemd/sd-hwdb/hwdb-util.c -@@ -126,9 +126,13 @@ static struct trie* trie_free(struct trie *trie) { - - DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); - --static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { -- return strcmp(trie->strings->buf + a->key_off, -- trie->strings->buf + b->key_off); -+static struct trie *trie_node_add_value_trie; -+static int trie_values_cmp(const void *v1, const void *v2) { -+ const struct trie_value_entry *a = v1; -+ const struct trie_value_entry *b = v2; -+ -+ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, -+ trie_node_add_value_trie->strings->buf + b->key_off); - } - - static int trie_node_add_value(struct trie *trie, struct trie_node *node, -@@ -156,7 +160,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .value_off = v, - }; - -- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; -+ - if (val) { - /* At this point we have 2 identical properties on the same match-string. - * Since we process files in order, we just replace the previous value. */ -@@ -182,7 +189,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .line_number = line_number, - }; - node->values_count++; -- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; - return 0; - } - -diff --git a/src/shared/format-table.c b/src/shared/format-table.c -index dccb796b26..c3ab8ac296 100644 --- a/src/shared/format-table.c +++ b/src/shared/format-table.c -@@ -1290,30 +1290,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t +@@ -1324,30 +1324,32 @@ static int cell_data_compare(TableData * return CMP(index_a, index_b); } @@ -133,7 +85,7 @@ index dccb796b26..c3ab8ac296 100644 } /* Order identical lines by the order there were originally added in */ -@@ -1952,7 +1954,12 @@ int table_print(Table *t, FILE *f) { +@@ -2009,7 +2011,12 @@ int table_print(Table *t, FILE *f) { for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; @@ -147,7 +99,7 @@ index dccb796b26..c3ab8ac296 100644 } if (t->display_map) -@@ -2580,7 +2587,12 @@ int table_to_json(Table *t, JsonVariant **ret) { +@@ -2647,7 +2654,12 @@ int table_to_json(Table *t, JsonVariant for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; @@ -161,3 +113,45 @@ index dccb796b26..c3ab8ac296 100644 } if (t->display_map) +--- a/src/shared/hwdb-util.c ++++ b/src/shared/hwdb-util.c +@@ -127,9 +127,13 @@ static struct trie* trie_free(struct tri + + DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); + +-static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { +- return strcmp(trie->strings->buf + a->key_off, +- trie->strings->buf + b->key_off); ++static struct trie *trie_node_add_value_trie; ++static int trie_values_cmp(const void *v1, const void *v2) { ++ const struct trie_value_entry *a = v1; ++ const struct trie_value_entry *b = v2; ++ ++ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, ++ trie_node_add_value_trie->strings->buf + b->key_off); + } + + static int trie_node_add_value(struct trie *trie, struct trie_node *node, +@@ -157,7 +161,10 @@ static int trie_node_add_value(struct tr + .value_off = v, + }; + +- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; ++ + if (val) { + /* At this point we have 2 identical properties on the same match-string. + * Since we process files in order, we just replace the previous value. */ +@@ -183,7 +190,9 @@ static int trie_node_add_value(struct tr + .line_number = line_number, + }; + node->values_count++; +- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; + return 0; + } + |