Commit Graph
13 Commits
Author SHA1 Message Date
Szabolcs NagyandRich Felker 827c4e6fbe fix lsearch and lfind to pass key as first arg to the compar callback
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.
2017-03-05 20:02:31 -05:00
Szabolcs NagyandRich Felker 3abb094d19 fix tsearch, tfind, tdelete to handle null pointer input
POSIX specifies the behaviour for null rootp input, but it
was not implemented correctly.
2015-12-08 18:53:18 -05:00
Szabolcs NagyandRich Felker 8994908b19 tsearch code cleanup
changed the insertion method to simplify the recursion logic and
reduce code size a bit.
2015-12-08 18:53:02 -05:00
Szabolcs NagyandRich Felker bc9744763a fix tsearch to avoid crash on oom
malloc failure was not properly propagated in the insertion method
which led to null pointer dereference.
2015-12-08 18:52:38 -05:00
Szabolcs NagyandRich Felker e4f9d81168 fix tdelete to properly balance the tree
the tsearch data structure is an avl tree, but it did not implement
the deletion operation correctly so the tree could become unbalanced.

reported by Ed Schouten.
2015-12-08 18:52:25 -05:00
sinandRich Felker 141d3b5c2a remove struct elem entirely from hsearch.c
There are two changes here, both of which make sense to be done in a
single patch:

- Remove hash from struct elem and compute it at runtime wherever
  necessary.
- Eliminate struct elem and use ENTRY directly.

As a result we cut down on the memory usage as each element in the
hash table now contains only an ENTRY not an ENTRY + size_t for the
hash. The downside is that the hash needs to be computed at runtime.
2014-04-02 18:49:24 -04:00
sinandRich Felker fe1ba7dbf1 implement hcreate_r, hdestroy_r and hsearch_r
the size and alignment of struct hsearch_data are matched to the glibc
definition for binary compatibility. the members of the structure do
not match, which should not be a problem as long as applications
correctly treat the structure as opaque.

unlike the glibc implementation, this version of hcreate_r does not
require the caller to zero-fill the structure before use.
2014-04-02 18:37:45 -04:00
Szabolcs Nagy b7d3210196 POSIX conformance fix: define struct entry in search.h 2013-10-29 20:25:11 +00:00
Rich Felker d3a98ff69a make tdestroy allow null function pointer if no destructor is needed
this change is to align with a change in the glibc interface.
2013-08-02 21:20:33 -04:00
Rich Felker 2d2da648f6 fix aliasing violations in tsearch functions
patch by nsz. the actual object the caller has storing the tree root
has type void *, so accessing it as struct node * is not valid.
instead, simply access the value, move it to a temporary of the
appropriate type and work from there, then move the result back.
2013-08-02 21:13:16 -04:00
nsz 6255c4c6a5 search: add comments to tsearch_avl.c 2012-05-13 01:50:53 +02:00
nsz d197d6421c search: add tdestroy (gnu extension) 2012-05-13 01:34:20 +02:00
Rich Felker febbd12d00 XSI search.h API implementation by Szabolcs Nagy 2011-06-25 18:18:57 -04:00