You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
852 B
41 lines
852 B
/* demo_utf8towc() against libc mbrtowc()
|
|
*
|
|
* Copyright 2017 Rob Landley <rob@landley.net>
|
|
|
|
USE_DEMO_UTF8TOWC(NEWTOY(demo_utf8towc, 0, TOYFLAG_USR|TOYFLAG_BIN))
|
|
|
|
config DEMO_UTF8TOWC
|
|
bool "demo_utf8towc"
|
|
default n
|
|
help
|
|
usage: demo_utf8towc
|
|
|
|
Print differences between toybox's utf8 conversion routines vs libc du jour.
|
|
*/
|
|
|
|
#include "toys.h"
|
|
|
|
void demo_utf8towc_main(void)
|
|
{
|
|
mbstate_t mb;
|
|
int len1, len2;
|
|
unsigned u, h;
|
|
wchar_t wc1, wc2;
|
|
|
|
memset(&mb, 0, sizeof(mb));
|
|
for (u=1; u; u++) {
|
|
char *str = (void *)&h;
|
|
|
|
wc1 = wc2 = 0;
|
|
len2 = 4;
|
|
h = htonl(u);
|
|
while (!*str) str++, len2--;
|
|
|
|
len1 = mbrtowc(&wc1, str, len2, &mb);
|
|
if (len1<0) memset(&mb, 0, sizeof(mb));
|
|
len2 = utf8towc(&wc2, str, len2);
|
|
if (len1 != len2 || wc1 != wc2)
|
|
printf("%x %d %x %d %x\n", u, len1, wc1, len2, wc2);
|
|
}
|
|
}
|