fix lsearch and lfind to pass key as first arg to the compar callback
authorSzabolcs Nagy <nsz@port70.net>
Sun, 5 Mar 2017 22:03:35 +0000 (23:03 +0100)
committerRich Felker <dalias@aerifal.cx>
Mon, 6 Mar 2017 01:02:31 +0000 (20:02 -0500)
this is not a conformance issue as posix does not specify the
argument order, but the order is specified for bsearch and some
systems document the order for lsearch consistently (openbsd).

since there were two indpendent reports of this issue it's better
to use the more widely expected argument order.

src/search/lsearch.c

index 63f319223a0abcd8c9f70544c0500bcdf9a6195b..5eb5cc2bd5bc4e8240dbeb9fb877209917f52283 100644 (file)
@@ -9,7 +9,7 @@ void *lsearch(const void *key, void *base, size_t *nelp, size_t width,
        size_t i;
 
        for (i = 0; i < n; i++)
-               if (compar(p[i], key) == 0)
+               if (compar(key, p[i]) == 0)
                        return p[i];
        *nelp = n+1;
        return memcpy(p[n], key, width);
@@ -23,7 +23,7 @@ void *lfind(const void *key, const void *base, size_t *nelp,
        size_t i;
 
        for (i = 0; i < n; i++)
-               if (compar(p[i], key) == 0)
+               if (compar(key, p[i]) == 0)
                        return p[i];
        return 0;
 }