From 4ffb1771554dd4661beb44be2036c598aa56c80a Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 18 Feb 2015 18:47:34 +0000 Subject: Fix search.h namespace (bug 17996). 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. --- misc/hsearch.c | 6 +++--- misc/hsearch_r.c | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'misc') diff --git a/misc/hsearch.c b/misc/hsearch.c index 510f170885..7a0b0dc406 100644 --- a/misc/hsearch.c +++ b/misc/hsearch.c @@ -30,7 +30,7 @@ hsearch (item, action) { ENTRY *result; - (void) hsearch_r (item, action, &result, &htab); + (void) __hsearch_r (item, action, &result, &htab); return result; } @@ -40,14 +40,14 @@ int hcreate (nel) size_t nel; { - return hcreate_r (nel, &htab); + return __hcreate_r (nel, &htab); } void __hdestroy (void) { - hdestroy_r (&htab); + __hdestroy_r (&htab); } weak_alias (__hdestroy, hdestroy) diff --git a/misc/hsearch_r.c b/misc/hsearch_r.c index 3a7c52682c..9f55e845cf 100644 --- a/misc/hsearch_r.c +++ b/misc/hsearch_r.c @@ -62,7 +62,7 @@ isprime (unsigned int number) The contents of the table is zeroed, especially the field used becomes zero. */ int -hcreate_r (nel, htab) +__hcreate_r (nel, htab) size_t nel; struct hsearch_data *htab; { @@ -97,13 +97,14 @@ hcreate_r (nel, htab) /* everything went alright */ return 1; } -libc_hidden_def (hcreate_r) +libc_hidden_def (__hcreate_r) +weak_alias (__hcreate_r, hcreate_r) /* After using the hash table it has to be destroyed. The used memory can be freed and the local static variable can be marked as not used. */ void -hdestroy_r (htab) +__hdestroy_r (htab) struct hsearch_data *htab; { /* Test for correct arguments. */ @@ -119,7 +120,8 @@ hdestroy_r (htab) /* the sign for an existing table is an value != NULL in htable */ htab->table = NULL; } -libc_hidden_def (hdestroy_r) +libc_hidden_def (__hdestroy_r) +weak_alias (__hdestroy_r, hdestroy_r) /* This is the search function. It uses double hashing with open addressing. @@ -136,7 +138,7 @@ libc_hidden_def (hdestroy_r) equality of the stored and the parameter value. This helps to prevent unnecessary expensive calls of strcmp. */ int -hsearch_r (item, action, retval, htab) +__hsearch_r (item, action, retval, htab) ENTRY item; ACTION action; ENTRY **retval; @@ -224,4 +226,5 @@ hsearch_r (item, action, retval, htab) *retval = NULL; return 0; } -libc_hidden_def (hsearch_r) +libc_hidden_def (__hsearch_r) +weak_alias (__hsearch_r, hsearch_r) -- cgit 1.4.1