Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Joseph Myers committed Jun 17, 2015
1 parent eb1fae6 commit 45dcd79
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 4 deletions.
9 changes: 9 additions & 0 deletions ChangeLog
@@ -1,5 +1,14 @@
2015-06-17 Joseph Myers <joseph@codesourcery.com>

[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.

[BZ #18540]
* libio/iofflush.c [!_IO_MTSAFE_IO] (__fflush_unlocked): Define as
strong alias of _IO_fflush. Use libc_hidden_def.
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Expand Up @@ -22,7 +22,7 @@ Version 2.22
18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434,
18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532,
18533, 18534, 18536, 18539, 18540.
18533, 18534, 18536, 18539, 18540, 18542.

* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
Expand Down
1 change: 0 additions & 1 deletion conform/Makefile
Expand Up @@ -348,4 +348,3 @@ test-xfail-XPG3/unistd.h/linknamespace = yes
test-xfail-XPG4/unistd.h/linknamespace = yes
test-xfail-POSIX/mqueue.h/linknamespace = yes
test-xfail-UNIX98/mqueue.h/linknamespace = yes
test-xfail-UNIX98/wchar.h/linknamespace = yes
4 changes: 4 additions & 0 deletions include/wchar.h
Expand Up @@ -197,7 +197,11 @@ extern int __isoc99_vwscanf (const wchar_t *__restrict __format,
extern int __isoc99_vswscanf (const wchar_t *__restrict __s,
const wchar_t *__restrict __format,
__gnuc_va_list __arg) __THROW;
extern int __vswscanf (const wchar_t *__restrict __s,
const wchar_t *__restrict __format,
__gnuc_va_list __arg) __THROW;
libc_hidden_proto (__isoc99_vswscanf)
libc_hidden_proto (__vswscanf)
libc_hidden_proto (__isoc99_vfwscanf)

/* Internal functions. */
Expand Down
3 changes: 2 additions & 1 deletion libio/iovswscanf.c
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion libio/swscanf.c
Expand Up @@ -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;
Expand Down

0 comments on commit 45dcd79

Please sign in to comment.