]> ruderich.org/simon Gitweb - nsscash/nsscash.git/blobdiff - nss/search.c
nss: remove pointer indirection in search_key's id member
[nsscash/nsscash.git] / nss / search.c
index d4f71068003e88c487f4b0c909b441e43330217e..62e8f431cb944ccfd3e36b5dc4db2c63cb9d3a71 100644 (file)
 static int bsearch_callback(const void *x, const void *y) {
     const struct search_key *key = x;
 
-    uint64_t offset = *(const uint64_t *)y;
+    uint64_t offset = *(const uint64_t *)y; // from index
     const void *member = (const char *)key->data + offset + key->offset;
 
-    // Lookup by name
+    // Lookup by name (char *)
     if (key->name != NULL) {
         const char *name = member;
         return strcmp(key->name, name);
 
-    // Lookup by ID
-    } else if (key->id != NULL) {
+    // Lookup by ID (uint64_t)
+    } else {
         const uint64_t *id = member;
-        if (*key->id < *id) {
+        if (key->id < *id) {
             return -1;
-        } else if (*key->id == *id) {
+        } else if (key->id == *id) {
             return 0;
         } else {
             return +1;
         }
-
-    } else {
-        abort();
     }
 }
 
-uint64_t *search(struct search_key *key, const void *index, uint64_t count) {
+// search performs a binary search on an index, described by key and index.
+uint64_t *search(const struct search_key *key, const void *index, uint64_t count) {
     return bsearch(key, index, count, sizeof(uint64_t), bsearch_callback);
 }