X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Fsearch.c;h=62e8f431cb944ccfd3e36b5dc4db2c63cb9d3a71;hb=ba614f8f445aa5490484427ecb3f643345b69358;hp=256001f16e1d19ac4b03706a81dee8266859ffc6;hpb=bfa9e0160a19bd7c151720de78749aa817d5986f;p=nsscash%2Fnsscash.git diff --git a/nss/search.c b/nss/search.c index 256001f..62e8f43 100644 --- a/nss/search.c +++ b/nss/search.c @@ -26,30 +26,28 @@ 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(); } } +// 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); }