diff options
Diffstat (limited to 'meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch')
-rw-r--r-- | meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch b/meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch new file mode 100644 index 0000000000..a5f74421ac --- /dev/null +++ b/meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch @@ -0,0 +1,105 @@ +From d343757d629402c70ca8e5eaa551deaf175c96f3 Mon Sep 17 00:00:00 2001 +From: Emil Renner Berthing <systemd@esmil.dk> +Date: Thu, 18 Sep 2014 15:24:56 +0200 +Subject: [PATCH 22/31] don't use glibc-specific qsort_r + +Upstream-Status: Pending + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + src/hwdb/hwdb.c | 18 +++++++++++------- + src/udev/udevadm-hwdb.c | 16 ++++++++++------ + 2 files changed, 21 insertions(+), 13 deletions(-) + +diff --git a/src/hwdb/hwdb.c b/src/hwdb/hwdb.c +index 4540260f9..81aca7a9b 100644 +--- a/src/hwdb/hwdb.c ++++ b/src/hwdb/hwdb.c +@@ -152,13 +152,12 @@ static void trie_free(struct trie *trie) { + + DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); + +-static int trie_values_cmp(const void *v1, const void *v2, void *arg) { ++static struct trie *trie_node_add_value_trie; ++static int trie_values_cmp(const void *v1, const void *v2) { + const struct trie_value_entry *val1 = v1; + const struct trie_value_entry *val2 = v2; +- struct trie *trie = arg; +- +- return strcmp(trie->strings->buf + val1->key_off, +- trie->strings->buf + val2->key_off); ++ return strcmp(trie_node_add_value_trie->strings->buf + val1->key_off, ++ trie_node_add_value_trie->strings->buf + val2->key_off); + } + + static int trie_node_add_value(struct trie *trie, struct trie_node *node, +@@ -183,7 +182,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .value_off = v, + }; + +- val = xbsearch_r(&search, node->values, node->values_count, sizeof(struct trie_value_entry), 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. +@@ -208,7 +210,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + node->values[node->values_count].file_priority = file_priority; + node->values[node->values_count].line_number = line_number; + node->values_count++; +- qsort_r(node->values, node->values_count, sizeof(struct trie_value_entry), 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/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c +index ab5dc7ab6..c777e30ab 100644 +--- a/src/udev/udevadm-hwdb.c ++++ b/src/udev/udevadm-hwdb.c +@@ -130,13 +130,13 @@ static void trie_node_cleanup(struct trie_node *node) { + free(node); + } + +-static int trie_values_cmp(const void *v1, const void *v2, void *arg) { ++static struct trie *trie_node_add_value_trie; ++static int trie_values_cmp(const void *v1, const void *v2) { + const struct trie_value_entry *val1 = v1; + const struct trie_value_entry *val2 = v2; +- struct trie *trie = arg; + +- return strcmp(trie->strings->buf + val1->key_off, +- trie->strings->buf + val2->key_off); ++ return strcmp(trie_node_add_value_trie->strings->buf + val1->key_off, ++ trie_node_add_value_trie->strings->buf + val2->key_off); + } + + static int trie_node_add_value(struct trie *trie, struct trie_node *node, +@@ -157,7 +157,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .value_off = v, + }; + +- val = xbsearch_r(&search, node->values, node->values_count, sizeof(struct trie_value_entry), 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) { + /* replace existing earlier key with new value */ + val->value_off = v; +@@ -174,7 +176,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + node->values[node->values_count].key_off = k; + node->values[node->values_count].value_off = v; + node->values_count++; +- qsort_r(node->values, node->values_count, sizeof(struct trie_value_entry), 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; + } + +-- +2.13.0 + |