aboutsummaryrefslogtreecommitdiff
path: root/libio
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-11-12 22:39:36 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-11-12 22:39:36 +0000
commitc4eae75271734f820a7477dbce33f8752af6f003 (patch)
treec909cac6bbda2c97e0003221ecd656cc668deb11 /libio
parent01cad84e1996a6f20bf19609d0554c73f2ee33d5 (diff)
downloadglibc-c4eae75271734f820a7477dbce33f8752af6f003.zip
glibc-c4eae75271734f820a7477dbce33f8752af6f003.tar.gz
glibc-c4eae75271734f820a7477dbce33f8752af6f003.tar.bz2
Fix __get_nprocs fgets_unlocked namespace (bug 17582).
__get_nprocs is called from malloc code, but calls fgets_unlocked, which is not an ISO C or POSIX function. This patch fixes it to call a new __fgets_unlocked name instead. Note: there are various other uses of fgets_unlocked in glibc's libraries, and I haven't yet investigated which others might also be problematic (called directly or indirectly from standard functions) and so need to change to use __fgets_unlocked. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17582] * libio/iofgets.c [weak_alias && !_IO_MTSAFE_IO] (__fgets_unlocked): Add alias of _IO_fgets. Use libc_hidden_def. * libio/iofgets_u.c (fgets_unlocked): Rename to __fgets_unlocked and define as weak alias of __fgets_unlocked. Use libc_hidden_weak. (__fgets_unlocked): Use libc_hidden_def. * include/stdio.h (__fgets_unlocked): Declare. Use libc_hidden_proto. * sysdeps/unix/sysv/linux/getsysstats.c (phys_pages_info): Use __fgets_unlocked instead of fgets_unlocked. * sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_CONF_PARSER): Likewise. * sysdeps/unix/sysv/linux/sparc/getsysstats.c (GET_NPROCS_CONF_PARSER): Likewise.
Diffstat (limited to 'libio')
-rw-r--r--libio/iofgets.c2
-rw-r--r--libio/iofgets_u.c6
2 files changed, 6 insertions, 2 deletions
diff --git a/libio/iofgets.c b/libio/iofgets.c
index 1b708ca..e352d09 100644
--- a/libio/iofgets.c
+++ b/libio/iofgets.c
@@ -73,6 +73,8 @@ _IO_fgets (buf, n, fp)
weak_alias (_IO_fgets, fgets)
# ifndef _IO_MTSAFE_IO
+strong_alias (_IO_fgets, __fgets_unlocked)
+libc_hidden_def (__fgets_unlocked)
weak_alias (_IO_fgets, fgets_unlocked)
libc_hidden_weak (fgets_unlocked)
# endif
diff --git a/libio/iofgets_u.c b/libio/iofgets_u.c
index b2d4d8f..d338ee0 100644
--- a/libio/iofgets_u.c
+++ b/libio/iofgets_u.c
@@ -28,7 +28,7 @@
#include <stdio.h>
char *
-fgets_unlocked (buf, n, fp)
+__fgets_unlocked (buf, n, fp)
char *buf;
int n;
_IO_FILE *fp;
@@ -66,4 +66,6 @@ fgets_unlocked (buf, n, fp)
fp->_IO_file_flags |= old_error;
return result;
}
-libc_hidden_def (fgets_unlocked)
+libc_hidden_def (__fgets_unlocked)
+weak_alias (__fgets_unlocked, fgets_unlocked)
+libc_hidden_weak (fgets_unlocked)