From 01cad84e1996a6f20bf19609d0554c73f2ee33d5 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 12 Nov 2014 22:38:11 +0000 Subject: Fix __printf_fp wmemset namespace (bug 17574). __printf_fp calls wmemset, but that is not an ISO C90 function. This patch fixes it to call a new __wmemset name instead (with wmemset being a weak alias). Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17574] * wcsmbs/wmemset.c (wmemset): Rename to __wmemset and define as weak alias of __wmemset. Use libc_hidden_weak. (__wmemset): Use libc_hidden_def. * include/wchar.h (__wmemset): Declare. Use libc_hidden_proto. * stdio-common/printf_fp.c (___printf_fp): Call __wmemset instead of wmemset. --- ChangeLog | 8 ++++++++ NEWS | 2 +- include/wchar.h | 2 ++ stdio-common/printf_fp.c | 2 +- wcsmbs/wmemset.c | 6 ++++-- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f33d5828f0..56fff4c9fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2014-11-12 Joseph Myers + [BZ #17574] + * wcsmbs/wmemset.c (wmemset): Rename to __wmemset and define as + weak alias of __wmemset. Use libc_hidden_weak. + (__wmemset): Use libc_hidden_def. + * include/wchar.h (__wmemset): Declare. Use libc_hidden_proto. + * stdio-common/printf_fp.c (___printf_fp): Call __wmemset instead + of wmemset. + [BZ #17573] * include/string.h [NOT_IN_libc || !SHARED] (mempcpy): Declare with asm name __mempcpy. diff --git a/NEWS b/NEWS index befd5e59c7..222696d392 100644 --- a/NEWS +++ b/NEWS @@ -11,7 +11,7 @@ Version 2.21 6652, 12926, 14132, 14138, 14171, 15215, 15884, 17266, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, - 17555, 17570, 17571, 17572, 17573, 17583, 17584. + 17555, 17570, 17571, 17572, 17573, 17574, 17583, 17584. * New locales: tu_IN, bh_IN. diff --git a/include/wchar.h b/include/wchar.h index f927a95fdf..8207a53282 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -88,8 +88,10 @@ libc_hidden_proto (wcschr) libc_hidden_proto (wcscoll) libc_hidden_proto (wcspbrk) +extern typeof (wmemset) __wmemset; libc_hidden_proto (wmemchr) libc_hidden_proto (wmemset) +libc_hidden_proto (__wmemset) /* Now define the internal interfaces. */ extern int __wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index c8061cbb90..406180cd6e 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -1112,7 +1112,7 @@ ___printf_fp (FILE *fp, wstartp[1] = decimalwc; if (wcp >= wstartp + 2) { - wmemset (wstartp + 6, L'0', wcp - (wstartp + 2)); + __wmemset (wstartp + 6, L'0', wcp - (wstartp + 2)); wcp += 4; } else diff --git a/wcsmbs/wmemset.c b/wcsmbs/wmemset.c index c49954531e..a80b815483 100644 --- a/wcsmbs/wmemset.c +++ b/wcsmbs/wmemset.c @@ -20,7 +20,7 @@ wchar_t * -wmemset (s, c, n) +__wmemset (s, c, n) wchar_t *s; wchar_t c; size_t n; @@ -52,4 +52,6 @@ wmemset (s, c, n) return s; } -libc_hidden_def (wmemset) +libc_hidden_def (__wmemset) +weak_alias (__wmemset, wmemset) +libc_hidden_weak (wmemset) -- cgit 1.4.1