X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Fsearch.c;h=bfc457ecbb072a6c0ba937bd5d4f7fbed6f1a277;hb=278c50be3d8a8c433aa862d602492112b9f26a67;hp=256001f16e1d19ac4b03706a81dee8266859ffc6;hpb=bfa9e0160a19bd7c151720de78749aa817d5986f;p=nsscash%2Fnsscash.git diff --git a/nss/search.c b/nss/search.c index 256001f..bfc457e 100644 --- a/nss/search.c +++ b/nss/search.c @@ -1,7 +1,7 @@ /* * Search entries in nsscash files by using indices and binary search * - * Copyright (C) 2019 Simon Ruderich + * Copyright (C) 2019-2021 Simon Ruderich * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -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); }