mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
a88f07f71f
mbstows is defined if dst is NULL and is defined to special cased if
dst is NULL so the fortify objsize check if incorrect in that case.
Tested on x86-64 linux.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
(cherry picked from commit 464d189b96
)
73 lines
1.2 KiB
C
73 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
wchar_t w[10];
|
|
char c[10];
|
|
int i;
|
|
int lose = 0;
|
|
|
|
i = mbstowcs (w, "bar", 4);
|
|
if (!(i == 3 && w[1] == 'a'))
|
|
{
|
|
puts ("mbstowcs FAILED!");
|
|
lose = 1;
|
|
}
|
|
|
|
i = mbstowcs (NULL, "bar", 4);
|
|
if (!(i == 3 && w[1] == 'a'))
|
|
{
|
|
puts ("mbstowcs FAILED2!");
|
|
lose = 1;
|
|
}
|
|
|
|
mbstowcs (w, "blah", 5);
|
|
i = wcstombs (c, w, 10);
|
|
if (i != 4)
|
|
{
|
|
puts ("wcstombs FAILED!");
|
|
lose = 1;
|
|
}
|
|
|
|
if (mblen ("foobar", 7) != 1)
|
|
{
|
|
puts ("mblen 1 FAILED!");
|
|
lose = 1;
|
|
}
|
|
|
|
if (mblen ("", 1) != 0)
|
|
{
|
|
puts ("mblen 2 FAILED!");
|
|
lose = 1;
|
|
}
|
|
|
|
{
|
|
int r;
|
|
char c = 'x';
|
|
wchar_t wc;
|
|
char mbc[MB_CUR_MAX];
|
|
|
|
if ((r = mbtowc (&wc, &c, MB_CUR_MAX)) <= 0)
|
|
{
|
|
printf ("conversion to wide failed, result: %d\n", r);
|
|
lose = 1;
|
|
}
|
|
else
|
|
{
|
|
printf ("wide value: 0x%04lx\n", (unsigned long) wc);
|
|
mbc[0] = '\0';
|
|
if ((r = wctomb (mbc, wc)) <= 0)
|
|
{
|
|
printf ("conversion to multibyte failed, result: %d\n", r);
|
|
lose = 1;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
puts (lose ? "Test FAILED!" : "Test succeeded.");
|
|
return lose;
|
|
}
|