mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-03 04:01:43 +08:00
4ffb177155
The implementation of the (XSI POSIX) functions hsearch / hcreate / hdestroy uses hsearch_r / hcreate_r / hdestroy_r, which are not POSIX functions. This patch makes those into weak aliases for __*_r and uses those names for the calls within libc. Tested for x86_64 that the disassembly of installed shared libraries is unchanged by this patch. [BZ #17996] * include/search.h (hcreate_r): Don't use libc_hidden_proto. (hdestroy_r): Likewise. (hsearch_r): Likewise. (__hcreate_r): Declare and use libc_hidden_proto. (__hdestroy_r): Likewise. (__hsearch_r): Likewise. * misc/hsearch.c (hsearch): Call __hsearch_r instead of hsearch_r. (hcreate): Call __hcreate_r instead of hcreate_r. (__hdestroy): Call __hdestroy_r instead of hdestroy_r. * misc/hsearch_r.c (hcreate_r): Rename to __hcreate_r and define as weak alias of __hcreate_r. (hdestroy_r): Rename to __hdestroy_r and define as weak alias of __hdestroy_r. (hsearch_r): Rename to __hsearch_r and define as weak alias of __hsearch_r. * conform/Makefile (test-xfail-XPG3/search.h/linknamespace): Remove variable. (test-xfail-XPG4/search.h/linknamespace): Likewise. (test-xfail-UNIX98/search.h/linknamespace): Likewise. (test-xfail-XOPEN2K/search.h/linknamespace): Likewise. (test-xfail-XOPEN2K8/search.h/linknamespace): Likewise.
25 lines
785 B
C
25 lines
785 B
C
#ifndef _SEARCH_H
|
|
#include <misc/search.h>
|
|
|
|
#ifndef _ISOMAC
|
|
extern __typeof (hcreate_r) __hcreate_r;
|
|
libc_hidden_proto (__hcreate_r)
|
|
extern __typeof (hdestroy_r) __hdestroy_r;
|
|
libc_hidden_proto (__hdestroy_r)
|
|
extern __typeof (hsearch_r) __hsearch_r;
|
|
libc_hidden_proto (__hsearch_r)
|
|
libc_hidden_proto (lfind)
|
|
|
|
/* Now define the internal interfaces. */
|
|
extern void __hdestroy (void);
|
|
extern void *__tsearch (const void *__key, void **__rootp,
|
|
__compar_fn_t compar);
|
|
extern void *__tfind (const void *__key, void *const *__rootp,
|
|
__compar_fn_t compar);
|
|
extern void *__tdelete (const void *__key, void **__rootp,
|
|
__compar_fn_t compar);
|
|
extern void __twalk (const void *__root, __action_fn_t action);
|
|
extern void __tdestroy (void *__root, __free_fn_t freefct);
|
|
#endif
|
|
#endif
|