[systemd-devel] [RFC 20/25] udevadm-hwdb: don't use glibc-specific qsort_r

Emil Renner Berthing systemd at esmil.dk
Thu Sep 18 06:24:56 PDT 2014


---
 src/udev/udevadm-hwdb.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index 65cbf61..3f31662 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -123,13 +123,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,
@@ -150,7 +150,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;
@@ -167,7 +169,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.1.0



More information about the systemd-devel mailing list