X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Fsearch.c;h=44e29d7af75832494d97ae17c7c001fdfd02f0ef;hb=1002c514a8530bb6608c556b4446e853be390917;hp=256001f16e1d19ac4b03706a81dee8266859ffc6;hpb=bfa9e0160a19bd7c151720de78749aa817d5986f;p=nsscash%2Fnsscash.git diff --git a/nss/search.c b/nss/search.c index 256001f..44e29d7 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-2020 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); }