diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-17 20:15:22 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-17 20:15:22 +0000 |
commit | 45dcd79f6eb37ad4e9e6967f1d459ffc3629eb1f (patch) | |
tree | bbe261f04108b8145b0f72eca98e6ae18bc549d2 /libio | |
parent | eb1fae6a450b3cce5a75c1ed1a734520c56a6457 (diff) | |
download | glibc-45dcd79f6eb37ad4e9e6967f1d459ffc3629eb1f.tar.gz glibc-45dcd79f6eb37ad4e9e6967f1d459ffc3629eb1f.tar.xz glibc-45dcd79f6eb37ad4e9e6967f1d459ffc3629eb1f.zip |
Fix swscanf vswscanf namespace (bug 18542).
swscanf (added in C90 Amendment 1, present in UNIX98) calls vswscanf (added in C99, not in C90 Amendment 1 or UNIX98). This patch fixes this by using __vswscanf instead and making vswscanf into a weak alias. (I intend to add conform/ test support for C90 Amendment 1 - and various other standard versions supported by glibc but not yet by conform/ tests - at some point, once the results for currently tested standards are cleaner.) Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18542] * libio/iovswscanf.c (__vswscanf): Use libc_hidden_def. (vswscanf): Use ldbl_weak_alias instead of ldbl_strong_alias * include/wchar.h (__vswscanf): Declare. Use libc_hidden_proto. * libio/swscanf.c (__swscanf): Call __vswscanf instead of vswscanf. * conform/Makefile (test-xfail-UNIX98/wchar.h/linknamespace): Remove variable.
Diffstat (limited to 'libio')
-rw-r--r-- | libio/iovswscanf.c | 3 | ||||
-rw-r--r-- | libio/swscanf.c | 2 |
2 files changed, 3 insertions, 2 deletions
diff --git a/libio/iovswscanf.c b/libio/iovswscanf.c index 7ee3597c52..a228641a85 100644 --- a/libio/iovswscanf.c +++ b/libio/iovswscanf.c @@ -43,5 +43,6 @@ __vswscanf (const wchar_t *string, const wchar_t *format, _IO_va_list args) ret = _IO_vfwscanf ((_IO_FILE *) &sf._sbf, format, args, NULL); return ret; } +libc_hidden_def (__vswscanf) ldbl_hidden_def (__vswscanf, vswscanf) -ldbl_strong_alias (__vswscanf, vswscanf) +ldbl_weak_alias (__vswscanf, vswscanf) diff --git a/libio/swscanf.c b/libio/swscanf.c index 9e4c256d24..397dbc554c 100644 --- a/libio/swscanf.c +++ b/libio/swscanf.c @@ -28,7 +28,7 @@ __swscanf (const wchar_t *s, const wchar_t *format, ...) int done; va_start (arg, format); - done = vswscanf (s, format, arg); + done = __vswscanf (s, format, arg); va_end (arg); return done; |