aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-02-19 17:18:51 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-02-19 17:18:51 +0000
commit40176158f1bfcf4fd1621169221c1aa8f0c3c300 (patch)
tree52a8351f99e40724de12016b07625877253b6c47
parent4629c866ad79167d60ca9bf263d871eabb59d3d9 (diff)
downloadglibc-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--ChangeLog15
-rw-r--r--NEWS2
-rw-r--r--conform/Makefile2
-rw-r--r--dirent/scandir.c2
-rw-r--r--dirent/scandirat.c6
-rw-r--r--include/dirent.h3
6 files changed, 24 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 8b6dd07..b09206c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
diff --git a/NEWS b/NEWS
index 0501d51..8d2c51b 100644
--- a/NEWS
+++ b/NEWS
@@ -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