Fix __printf_fp wmemset namespace (bug 17574).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 12 Nov 2014 22:38:11 +0000 (22:38 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 12 Nov 2014 22:38:11 +0000 (22:38 +0000)
__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
NEWS
include/wchar.h
stdio-common/printf_fp.c
wcsmbs/wmemset.c

index f33d582..56fff4c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2014-11-12  Joseph Myers  <joseph@codesourcery.com>
 
+       [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 befd5e5..222696d 100644 (file)
--- 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.
 \f
index f927a95..8207a53 100644 (file)
@@ -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)
index c8061cb..406180c 100644 (file)
@@ -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
index c499545..a80b815 100644 (file)
@@ -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)