#include <search.h> | |
#include <string.h> | |
void* lsearch(const void* key, | |
void* base, | |
size_t* nelp, | |
size_t width, | |
int (*compar)(const void*, const void*)) { | |
char(*p)[width] = base; | |
size_t n = *nelp; | |
size_t i; | |
for (i = 0; i < n; i++) | |
if (compar(p[i], key) == 0) | |
return p[i]; | |
*nelp = n + 1; | |
return memcpy(p[n], key, width); | |
} | |
void* lfind(const void* key, | |
const void* base, | |
size_t* nelp, | |
size_t width, | |
int (*compar)(const void*, const void*)) { | |
char(*p)[width] = (void*)base; | |
size_t n = *nelp; | |
size_t i; | |
for (i = 0; i < n; i++) | |
if (compar(p[i], key) == 0) | |
return p[i]; | |
return 0; | |
} |