Skip to content

Commit

Permalink
Fix scandir scandirat namespace (bug 17999).
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Joseph Myers committed Feb 19, 2015
1 parent 4629c86 commit 4017615
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 6 deletions.
15 changes: 15 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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]
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 0 additions & 2 deletions conform/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion dirent/scandir.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

#ifndef SCANDIR
# define SCANDIR scandir
# define SCANDIRAT scandirat
# define SCANDIRAT __scandirat
# define DIRENT_TYPE struct dirent
#endif

Expand Down
6 changes: 5 additions & 1 deletion dirent/scandirat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion include/dirent.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 4017615

Please sign in to comment.