mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 01:33:36 +08:00
464d189b96
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>
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;
|
|
}
|