diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-02-19 17:18:51 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-02-19 17:18:51 +0000 |
commit | 40176158f1bfcf4fd1621169221c1aa8f0c3c300 (patch) | |
tree | 52a8351f99e40724de12016b07625877253b6c47 | |
parent | 4629c866ad79167d60ca9bf263d871eabb59d3d9 (diff) | |
download | glibc-40176158f1bfcf4fd1621169221c1aa8f0c3c300.zip glibc-40176158f1bfcf4fd1621169221c1aa8f0c3c300.tar.gz glibc-40176158f1bfcf4fd1621169221c1aa8f0c3c300.tar.bz2 |
Fix scandir scandirat namespace (bug 17999).
The POSIX function scandir calls scandirat, which is not a POSIX
function. This patch fixes this by making it use __scandirat and
making scandirat a weak alias. There are no changes for scandir64 /
scandirat64 because those are both _GNU_SOURCE-only functions so no
namespace issue arises for them.
Tested for x86_64 that the disassembly of installed shared libraries
is unchanged by this patch.
[BZ #17999]
* dirent/scandir.c [!SCANDIR] (SCANDIRAT): Define to __scandirat
instead of scandirat.
* dirent/scandirat.c [!SCANDIRAT] (SCANDIRAT): Likewise.
[!SCANDIRAT] (SCANDIRAT_WEAK_ALIAS): Define.
[SCANDIRAT_WEAK_ALIAS] (scandirat): Define as weak alias of
__scandirat.
* include/dirent.h (scandirat): Do not use libc_hidden_proto.
(__scandirat): Declare. Use libc_hidden_proto.
* conform/Makefile (test-xfail-POSIX2008/dirent.h/linknamespace):
Remove variable.
(test-xfail-XOPEN2K8/dirent.h/linknamespace): Likewise.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | conform/Makefile | 2 | ||||
-rw-r--r-- | dirent/scandir.c | 2 | ||||
-rw-r--r-- | dirent/scandirat.c | 6 | ||||
-rw-r--r-- | include/dirent.h | 3 |
6 files changed, 24 insertions, 6 deletions
@@ -1,3 +1,18 @@ +2015-02-19 Joseph Myers <joseph@codesourcery.com> + + [BZ #17999] + * dirent/scandir.c [!SCANDIR] (SCANDIRAT): Define to __scandirat + instead of scandirat. + * dirent/scandirat.c [!SCANDIRAT] (SCANDIRAT): Likewise. + [!SCANDIRAT] (SCANDIRAT_WEAK_ALIAS): Define. + [SCANDIRAT_WEAK_ALIAS] (scandirat): Define as weak alias of + __scandirat. + * include/dirent.h (scandirat): Do not use libc_hidden_proto. + (__scandirat): Declare. Use libc_hidden_proto. + * conform/Makefile (test-xfail-POSIX2008/dirent.h/linknamespace): + Remove variable. + (test-xfail-XOPEN2K8/dirent.h/linknamespace): Likewise. + 2015-02-18 Joseph Myers <joseph@codesourcery.com> [BZ #15319] @@ -10,7 +10,7 @@ Version 2.22 * The following bugs are resolved with this release: 4719, 15319, 15467, 15790, 16560, 17569, 17792, 17912, 17932, 17944, - 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996. + 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17999. Version 2.21 diff --git a/conform/Makefile b/conform/Makefile index 39f41bd..3f9721a 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -393,13 +393,11 @@ test-xfail-XOPEN2K/syslog.h/linknamespace = yes test-xfail-XOPEN2K/ucontext.h/linknamespace = yes test-xfail-XOPEN2K/unistd.h/linknamespace = yes test-xfail-XOPEN2K/wordexp.h/linknamespace = yes -test-xfail-POSIX2008/dirent.h/linknamespace = yes test-xfail-POSIX2008/grp.h/linknamespace = yes test-xfail-POSIX2008/netdb.h/linknamespace = yes test-xfail-POSIX2008/regex.h/linknamespace = yes test-xfail-POSIX2008/semaphore.h/linknamespace = yes test-xfail-POSIX2008/unistd.h/linknamespace = yes -test-xfail-XOPEN2K8/dirent.h/linknamespace = yes test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes test-xfail-XOPEN2K8/grp.h/linknamespace = yes test-xfail-XOPEN2K8/netdb.h/linknamespace = yes diff --git a/dirent/scandir.c b/dirent/scandir.c index 1039b9b..99c9681 100644 --- a/dirent/scandir.c +++ b/dirent/scandir.c @@ -28,7 +28,7 @@ #ifndef SCANDIR # define SCANDIR scandir -# define SCANDIRAT scandirat +# define SCANDIRAT __scandirat # define DIRENT_TYPE struct dirent #endif diff --git a/dirent/scandirat.c b/dirent/scandirat.c index 1147cee..004b152 100644 --- a/dirent/scandirat.c +++ b/dirent/scandirat.c @@ -30,9 +30,10 @@ #include <bits/libc-lock.h> #ifndef SCANDIRAT -# define SCANDIRAT scandirat +# define SCANDIRAT __scandirat # define READDIR __readdir # define DIRENT_TYPE struct dirent +# define SCANDIRAT_WEAK_ALIAS #endif #ifndef SKIP_SCANDIR_CANCEL @@ -148,6 +149,9 @@ SCANDIRAT (dfd, dir, namelist, select, cmp) return c.cnt; } libc_hidden_def (SCANDIRAT) +#ifdef SCANDIRAT_WEAK_ALIAS +weak_alias (__scandirat, scandirat) +#endif #ifdef _DIRENT_MATCHES_DIRENT64 weak_alias (scandirat, scandirat64) diff --git a/include/dirent.h b/include/dirent.h index e8e9e42..2e797ae 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -50,7 +50,8 @@ extern void __scandir_cancel_handler (void *arg); extern __typeof (rewinddir) __rewinddir; libc_hidden_proto (__rewinddir) -libc_hidden_proto (scandirat) +extern __typeof (scandirat) __scandirat; +libc_hidden_proto (__scandirat) libc_hidden_proto (scandirat64) # endif |