#endif
struct MD_LUT_ENTRY {
- const char *key; /* Needs to be first, so that strcmp() works */
+ const char *key;
void *data;
};
@@ -25,17 +25,15 @@ struct MD_LUT {
struct MD_LUT_ENTRY *start;
};
-/*
-MD_DECL int _md_lut_compare(struct MD_LUT_ENTRY *k1, struct MD_LUT_ENTRY *k2) {
- return strcmp(k1->key, k2->key);
+MD_DECL int _md_lut_compare(const void *key, const void *entry) {
+ const struct MD_LUT_ENTRY *e = entry;
+ return strcmp((const char *) key, e->key);
}
-*/
MD_DECL struct MD_LUT_ENTRY *md_lut_find(struct MD_LUT *t, const char *key) {
- struct MD_LUT_ENTRY ref = {key, NULL};
- return lfind(&ref, t->start, &t->n, sizeof(struct MD_LUT_ENTRY),
- (int (*)(const void *, const void *)) strcmp);
+ return lfind(key, t->start, &t->n, sizeof(struct MD_LUT_ENTRY),
+ _md_lut_compare);
}
MD_DECL void md_lut_insert(struct MD_LUT *t, const char *key, void *data) {
@@ -66,6 +66,10 @@ static int mygetline(char **line_ptr, size_t *line_n, FILE *stream) {
return len;
}
+static int lfind_strcmp(const void *key, const void *objp) {
+ return strcmp((const char *) key, *(const char **) objp);
+}
+
int main(int argc, char **argv) {
struct DATA data, timer_overrun_data = {-1, USHRT_MAX, 0};
ATM_SHM mem = NULL;
@@ -147,7 +151,7 @@ int main(int argc, char **argv) {
puts(line);
if (logname && !strcmp(line, logname))
logid = num_keys;
- if (!(all || lfind(line, &argv[i], &num_args, sizeof(argv[i]), strcmp))){
+ if (!(all || lfind(line, &argv[i], &num_args, sizeof(argv[i]), lfind_strcmp))){
keys[num_keys].value_index = -1;
continue;
}