| From 2eb45f5a0a8bfb8bdca084587ad28e5001f3cc4b 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 11/12] don't use glibc-specific qsort_r |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| Upstream-Status: Pending |
| |
| 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 793398ca6..669b00818 100644 |
| --- a/src/hwdb/hwdb.c |
| +++ b/src/hwdb/hwdb.c |
| @@ -151,13 +151,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, |
| @@ -182,7 +181,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. |
| @@ -207,7 +209,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 69b0b9025..fbd213300 100644 |
| --- a/src/udev/udevadm-hwdb.c |
| +++ b/src/udev/udevadm-hwdb.c |
| @@ -128,13 +128,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, |
| @@ -155,7 +155,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; |
| @@ -172,7 +174,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.14.2 |
| |