]> sourceware.org Git - glibc.git/commitdiff
Fix pathconf basename namespace (bug 18444).
authorJoseph Myers <joseph@codesourcery.com>
Fri, 22 May 2015 17:09:36 +0000 (17:09 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 22 May 2015 17:09:36 +0000 (17:09 +0000)
pathconf (sysdeps/unix/sysv/linux/pathconf.c) uses basename.  But
pathconf is in POSIX back to 1990 while basename is only reserved with
external linkage in those standards including XPG functions.  This
patch fixes this namespace issue in the usual way, renaming basename
to __basename and making it into a weak alias.

Tested for x86_64 and x86 (testsuite, and that disassembly of
installed shared libraries is unchanged by the patch).

[BZ #18444]
* string/basename.c (basename): Rename to __basename and define as
weak alias of __basename.  Use libc_hidden_weak.
* include/string.h (__basename): Declare.  Use libc_hidden_proto.
* sysdeps/unix/sysv/linux/pathconf.c (distinguish_extX): Call
__basename instead of basename.
* conform/Makefile (test-xfail-POSIX2008/unistd.h/linknamespace):
Remove variable.
(test-xfail-XOPEN2K8/unistd.h/linknamespace): Likewise.

ChangeLog
NEWS
conform/Makefile
include/string.h
string/basename.c
sysdeps/unix/sysv/linux/pathconf.c

index 27267b1f22e908a5bbd3993eed493ae359c05fc2..6a44067db4713f8b633fd6c9915a78500d8916f3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2015-05-22  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #18444]
+       * string/basename.c (basename): Rename to __basename and define as
+       weak alias of __basename.  Use libc_hidden_weak.
+       * include/string.h (__basename): Declare.  Use libc_hidden_proto.
+       * sysdeps/unix/sysv/linux/pathconf.c (distinguish_extX): Call
+       __basename instead of basename.
+       * conform/Makefile (test-xfail-POSIX2008/unistd.h/linknamespace):
+       Remove variable.
+       (test-xfail-XOPEN2K8/unistd.h/linknamespace): Likewise.
+
 2015-05-18  Florian Weimer  <fweimer@redhat.com>
 
        * libio/libioP.h (_IO_MEMBER_TYPE, _IO_CAST_FIELD_ACCESS)
diff --git a/NEWS b/NEWS
index 324f437a87ccac811acc6f8a7253fcf6e44a490a..56aa6d7f7e6e54706265b64f23682cde66e286a8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,7 +18,7 @@ Version 2.22
   18030, 18032, 18036, 18038, 18039, 18042, 18043, 18046, 18047, 18049,
   18068, 18080, 18093, 18100, 18104, 18110, 18111, 18125, 18128, 18138,
   18185, 18196, 18197, 18206, 18210, 18211, 18217, 18220, 18221, 18244,
-  18247, 18287, 18319, 18333, 18346, 18397, 18409, 18418, 18434.
+  18247, 18287, 18319, 18333, 18346, 18397, 18409, 18418, 18434, 18444.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
index bdd7203f9e476e00b579d5e1bded55fbd8b5689e..a81ed5481265e615468f3798e7feec6480dde6a6 100644 (file)
@@ -395,10 +395,8 @@ test-xfail-XOPEN2K/wordexp.h/linknamespace = yes
 test-xfail-POSIX2008/grp.h/linknamespace = yes
 test-xfail-POSIX2008/netdb.h/linknamespace = yes
 test-xfail-POSIX2008/semaphore.h/linknamespace = yes
-test-xfail-POSIX2008/unistd.h/linknamespace = yes
 test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes
 test-xfail-XOPEN2K8/grp.h/linknamespace = yes
 test-xfail-XOPEN2K8/netdb.h/linknamespace = yes
 test-xfail-XOPEN2K8/pwd.h/linknamespace = yes
 test-xfail-XOPEN2K8/syslog.h/linknamespace = yes
-test-xfail-XOPEN2K8/unistd.h/linknamespace = yes
index 034e2953df7503db3e4768be9f7c1b387271c16e..89f00fda4ed4d5e3731b02c9d92cec60a1b4e9a4 100644 (file)
@@ -82,6 +82,8 @@ libc_hidden_proto (__strndup)
 libc_hidden_proto (__strerror_r)
 libc_hidden_proto (__strverscmp)
 libc_hidden_proto (basename)
+extern char *__basename (const char *__filename) __THROW __nonnull ((1));
+libc_hidden_proto (__basename)
 libc_hidden_proto (strcoll)
 libc_hidden_proto (__strcoll_l)
 libc_hidden_proto (__strxfrm_l)
index 5052ebf4df3daed903fec5c7d1963ed3a75ae86d..4caabca8f03df25869d4eb7da183f29726e866ad 100644 (file)
 #include <string.h>
 
 char *
-basename (const char *filename)
+__basename (const char *filename)
 {
   char *p = strrchr (filename, '/');
   return p ? p + 1 : (char *) filename;
 }
-libc_hidden_def (basename)
+libc_hidden_def (__basename)
+weak_alias (__basename, basename)
+libc_hidden_weak (basename)
index e6fd7b5c611043afd3e6f08571a88b98a15a1f70..37f308bad725b6ce572a5f9acf5fab06b8b51ef8 100644 (file)
@@ -79,7 +79,7 @@ distinguish_extX (const struct statfs *fsbuf, const char *file, int fd)
   if (n != -1 && n < sizeof (path))
     {
       path[n] = '\0';
-      char *base = strdupa (basename (path));
+      char *base = strdupa (__basename (path));
       __snprintf (path, sizeof (path), "/sys/fs/ext4/%s", base);
 
       return __access (path, F_OK) == 0 ? EXT4_LINK_MAX : EXT2_LINK_MAX;
This page took 0.181884 seconds and 5 git commands to generate.