summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-12 20:02:30 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-12 20:02:30 +0000
commit5371d99e8766f25864ddf20fb0866e57fc0b7991 (patch)
tree7da25c486c5cee518ba959fd05f3629a0479b253 /sysdeps
parenta82a3db95077c8343b988a6f1b03adea3d40f6d4 (diff)
Fix getlogin_r namespace (bug 18527).
Various functions in XPG4 bring in references to getlogin_r, which is not in XPG4; this is also a bug for some older POSIX versions which aren't yet covered by the linknamespace tests. This patch fixes this by making getlogin_r into a weak alias for __getlogin_r and using __getlogin_r as needed. Tested for x86_64 and x86 (testsuite, and that disassembly of installed stripped shared libraries is unchanged by the patch). [BZ #18527] * login/getlogin_r.c (getlogin_r): Rename to __getlogin_r and define as weak alias of __getlogin_r. Use libc_hidden_weak. * sysdeps/mach/hurd/getlogin_r.c (getlogin_r): Likewise. * sysdeps/unix/getlogin_r.c (getlogin_r): Likewise. * sysdeps/unix/sysv/linux/getlogin_r.c (getlogin_r): Likewise. * include/unistd.h (__getlogin_r): Declare. Use libc_hidden_proto. * posix/glob.c (glob): Call __getlogin_r instead of getlogin_r. * conform/Makefile (test-xfail-XPG3/glob.h/linknamespace): Remove variable. (test-xfail-XPG3/wordexp.h/linknamespace): Likewise. (test-xfail-XPG4/glob.h/linknamespace): Likewise. (test-xfail-XPG4/wordexp.h/linknamespace): Likewise.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mach/hurd/getlogin_r.c6
-rw-r--r--sysdeps/unix/getlogin_r.c6
-rw-r--r--sysdeps/unix/sysv/linux/getlogin_r.c10
3 files changed, 14 insertions, 8 deletions
diff --git a/sysdeps/mach/hurd/getlogin_r.c b/sysdeps/mach/hurd/getlogin_r.c
index f1c2951b39..9c66f865ab 100644
--- a/sysdeps/mach/hurd/getlogin_r.c
+++ b/sysdeps/mach/hurd/getlogin_r.c
@@ -25,7 +25,7 @@
If it cannot be determined or some other error occurred, return the error
code. Otherwise return 0. */
int
-getlogin_r (name, name_len)
+__getlogin_r (name, name_len)
char *name;
size_t name_len;
{
@@ -45,4 +45,6 @@ getlogin_r (name, name_len)
memcpy (name, login, len);
return 0;
}
-libc_hidden_def (getlogin_r)
+libc_hidden_def (__getlogin_r)
+weak_alias (__getlogin_r, getlogin_r)
+libc_hidden_weak (getlogin_r)
diff --git a/sysdeps/unix/getlogin_r.c b/sysdeps/unix/getlogin_r.c
index 4a31d254ee..8bb3de5e75 100644
--- a/sysdeps/unix/getlogin_r.c
+++ b/sysdeps/unix/getlogin_r.c
@@ -34,7 +34,7 @@
STATIC
#endif
int
-getlogin_r (name, name_len)
+__getlogin_r (name, name_len)
char *name;
size_t name_len;
{
@@ -99,5 +99,7 @@ getlogin_r (name, name_len)
return result;
}
#ifndef STATIC
-libc_hidden_def (getlogin_r)
+libc_hidden_def (__getlogin_r)
+weak_alias (__getlogin_r, getlogin_r)
+libc_hidden_weak (getlogin_r)
#endif
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 2c52b2183b..aa61f6134d 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -21,9 +21,9 @@
#define STATIC static
static int getlogin_r_fd0 (char *name, size_t namesize);
-#define getlogin_r getlogin_r_fd0
+#define __getlogin_r getlogin_r_fd0
#include <sysdeps/unix/getlogin_r.c>
-#undef getlogin_r
+#undef __getlogin_r
/* Try to determine login name from /proc/self/loginuid and return 0
@@ -109,7 +109,7 @@ __getlogin_r_loginuid (name, namesize)
code. Otherwise return 0. */
int
-getlogin_r (name, namesize)
+__getlogin_r (name, namesize)
char *name;
size_t namesize;
{
@@ -119,4 +119,6 @@ getlogin_r (name, namesize)
return getlogin_r_fd0 (name, namesize);
}
-libc_hidden_def (getlogin_r)
+libc_hidden_def (__getlogin_r)
+weak_alias (__getlogin_r, getlogin_r)
+libc_hidden_weak (getlogin_r)