aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-02-18 18:47:34 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-02-18 18:47:34 +0000
commit4ffb1771554dd4661beb44be2036c598aa56c80a (patch)
tree28c5450c2dca041865cd73a3b1f90178fd7f20ba /misc
parent94c5a52a841f807a23dbdd19a5ddeb505cc1d543 (diff)
downloadglibc-4ffb1771554dd4661beb44be2036c598aa56c80a.zip
glibc-4ffb1771554dd4661beb44be2036c598aa56c80a.tar.gz
glibc-4ffb1771554dd4661beb44be2036c598aa56c80a.tar.bz2
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.
Diffstat (limited to 'misc')
-rw-r--r--misc/hsearch.c6
-rw-r--r--misc/hsearch_r.c15
2 files changed, 12 insertions, 9 deletions
diff --git a/misc/hsearch.c b/misc/hsearch.c
index 510f170..7a0b0dc 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 3a7c526..9f55e84 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)