about summary refs log tree commit diff
path: root/libio
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-17 20:15:22 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-17 20:15:22 +0000
commit45dcd79f6eb37ad4e9e6967f1d459ffc3629eb1f (patch)
treebbe261f04108b8145b0f72eca98e6ae18bc549d2 /libio
parenteb1fae6a450b3cce5a75c1ed1a734520c56a6457 (diff)
downloadglibc-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.c3
-rw-r--r--libio/swscanf.c2
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;