mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
Fix qsort_r namespace (bug 17571).
qsort_r is defined in the same file as qsort, but is not an ISO C function, so should be a weak alias for __qsort_r. The uses in getaddrinfo should also call __qsort_r, since getaddrinfo is a POSIX function and qsort_r isn't. This patch implements this. Because nscd uses the getaddrinfo sources outside libc, as do the tst-rfc3484 tests, a #define of __qsort_r to qsort_r is added there alongside the similar defines for other libc-internal symbols used in getaddrinfo. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17571] * stdlib/msort.c (qsort_r): Rename to __qsort_r and define as weak alias of __qsort_r. (qsort): Call __qsort_r instead of qsort_r. * include/stdlib.h (qsort_r): Do not call libc_hidden_proto. (__qsort_r): Declare. Call libc_hidden_proto. * sysdeps/posix/getaddrinfo.c (getaddrinfo): Call __qsort_r instead of qsort_r. * nscd/gai.c (__qsort_r): Define to qsort_r. * posix/tst-rfc3484.c (__qsort_r): Likewise. * posix/tst-rfc3484-2.c (__qsort_r): Likewise. * posix/tst-rfc3484-3.c (__qsort_r): Likewise.
This commit is contained in:
parent
c52ff39e8e
commit
bef8fd6013
13
ChangeLog
13
ChangeLog
@ -1,5 +1,18 @@
|
|||||||
2014-11-12 Joseph Myers <joseph@codesourcery.com>
|
2014-11-12 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #17571]
|
||||||
|
* stdlib/msort.c (qsort_r): Rename to __qsort_r and define as weak
|
||||||
|
alias of __qsort_r.
|
||||||
|
(qsort): Call __qsort_r instead of qsort_r.
|
||||||
|
* include/stdlib.h (qsort_r): Do not call libc_hidden_proto.
|
||||||
|
(__qsort_r): Declare. Call libc_hidden_proto.
|
||||||
|
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Call __qsort_r
|
||||||
|
instead of qsort_r.
|
||||||
|
* nscd/gai.c (__qsort_r): Define to qsort_r.
|
||||||
|
* posix/tst-rfc3484.c (__qsort_r): Likewise.
|
||||||
|
* posix/tst-rfc3484-2.c (__qsort_r): Likewise.
|
||||||
|
* posix/tst-rfc3484-3.c (__qsort_r): Likewise.
|
||||||
|
|
||||||
[BZ #17570]
|
[BZ #17570]
|
||||||
* malloc/malloc.c (malloc_info): Rename to __malloc_info and
|
* malloc/malloc.c (malloc_info): Rename to __malloc_info and
|
||||||
define as weak alias of __malloc_info.
|
define as weak alias of __malloc_info.
|
||||||
|
2
NEWS
2
NEWS
@ -11,7 +11,7 @@ Version 2.21
|
|||||||
|
|
||||||
6652, 12926, 14132, 14138, 14171, 15215, 15884, 17266, 17344, 17363,
|
6652, 12926, 14132, 14138, 14171, 15215, 15884, 17266, 17344, 17363,
|
||||||
17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522,
|
17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522,
|
||||||
17555, 17570, 17583, 17584.
|
17555, 17570, 17571, 17583, 17584.
|
||||||
|
|
||||||
* New locales: tu_IN, bh_IN.
|
* New locales: tu_IN, bh_IN.
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ extern __typeof (secure_getenv) __libc_secure_getenv;
|
|||||||
libc_hidden_proto (__libc_secure_getenv)
|
libc_hidden_proto (__libc_secure_getenv)
|
||||||
libc_hidden_proto (bsearch)
|
libc_hidden_proto (bsearch)
|
||||||
libc_hidden_proto (qsort)
|
libc_hidden_proto (qsort)
|
||||||
libc_hidden_proto (qsort_r)
|
extern __typeof (qsort_r) __qsort_r;
|
||||||
|
libc_hidden_proto (__qsort_r)
|
||||||
libc_hidden_proto (lrand48_r)
|
libc_hidden_proto (lrand48_r)
|
||||||
libc_hidden_proto (wctomb)
|
libc_hidden_proto (wctomb)
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#define __sendto sendto
|
#define __sendto sendto
|
||||||
#define __strchrnul strchrnul
|
#define __strchrnul strchrnul
|
||||||
#define __getline getline
|
#define __getline getline
|
||||||
|
#define __qsort_r qsort_r
|
||||||
/* nscd uses 1MB or 2MB thread stacks. */
|
/* nscd uses 1MB or 2MB thread stacks. */
|
||||||
#define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF)
|
#define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF)
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define __inet_aton inet_aton
|
#define __inet_aton inet_aton
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
#define __gethostbyaddr_r gethostbyaddr_r
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
#define __gethostbyname2_r gethostbyname2_r
|
||||||
|
#define __qsort_r qsort_r
|
||||||
|
|
||||||
void
|
void
|
||||||
attribute_hidden
|
attribute_hidden
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define __inet_aton inet_aton
|
#define __inet_aton inet_aton
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
#define __gethostbyaddr_r gethostbyaddr_r
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
#define __gethostbyname2_r gethostbyname2_r
|
||||||
|
#define __qsort_r qsort_r
|
||||||
|
|
||||||
void
|
void
|
||||||
attribute_hidden
|
attribute_hidden
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define __inet_aton inet_aton
|
#define __inet_aton inet_aton
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
#define __gethostbyaddr_r gethostbyaddr_r
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
#define __gethostbyname2_r gethostbyname2_r
|
||||||
|
#define __qsort_r qsort_r
|
||||||
|
|
||||||
void
|
void
|
||||||
attribute_hidden
|
attribute_hidden
|
||||||
|
@ -162,7 +162,7 @@ msort_with_tmp (const struct msort_param *p, void *b, size_t n)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
|
__qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
|
||||||
{
|
{
|
||||||
size_t size = n * s;
|
size_t size = n * s;
|
||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
@ -298,12 +298,13 @@ qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
|
|||||||
}
|
}
|
||||||
free (tmp);
|
free (tmp);
|
||||||
}
|
}
|
||||||
libc_hidden_def (qsort_r)
|
libc_hidden_def (__qsort_r)
|
||||||
|
weak_alias (__qsort_r, qsort_r)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
|
qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
|
||||||
{
|
{
|
||||||
return qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
|
return __qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
|
||||||
}
|
}
|
||||||
libc_hidden_def (qsort)
|
libc_hidden_def (qsort)
|
||||||
|
@ -2626,11 +2626,11 @@ getaddrinfo (const char *name, const char *service,
|
|||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
if (__libc_once_get (old_once) && gaiconf_reload_flag)
|
if (__libc_once_get (old_once) && gaiconf_reload_flag)
|
||||||
gaiconf_reload ();
|
gaiconf_reload ();
|
||||||
qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src);
|
__qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src);
|
||||||
__libc_lock_unlock (lock);
|
__libc_lock_unlock (lock);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src);
|
__qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src);
|
||||||
|
|
||||||
/* Queue the results up as they come out of sorting. */
|
/* Queue the results up as they come out of sorting. */
|
||||||
q = p = results[order[0]].dest_addr;
|
q = p = results[order[0]].dest_addr;
|
||||||
|
Loading…
Reference in New Issue
Block a user