From 0346d5174eb0ce553cda977d91dd6cf61b7ffe82 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 19 Mar 2011 22:28:32 -0400 Subject: initial check-in --- utf8.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 utf8.c (limited to 'utf8.c') diff --git a/utf8.c b/utf8.c new file mode 100644 index 0000000..5a675ed --- /dev/null +++ b/utf8.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include + +size_t b_utf8_bigbuf(void *dummy) +{ + char *buf; + wchar_t *wbuf; + size_t i, j, k, l; + size_t cs; + + setlocale(LC_CTYPE, "C.UTF-8") + || setlocale(LC_CTYPE, "en_US.UTF-8") + || setlocale(LC_CTYPE, "en_GB.UTF-8") + || setlocale(LC_CTYPE, "en.UTF-8") + || setlocale(LC_CTYPE, "de_DE-8") + || setlocale(LC_CTYPE, "fr_FR-8"); + if (strcmp(nl_langinfo(CODESET), "UTF-8")) return -1; + + buf = malloc(500000); + wbuf = malloc(500000*sizeof(wchar_t)); + l = 0; + for (i=0xc3; i<0xe0; i++) + for (j=0x80; j<0xc0; j++) + buf[l++] = i, buf[l++] = j; + for (i=0xe1; i<0xed; i++) + for (j=0x80; j<0xc0; j++) + for (k=0x80; k<0xc0; k++) + buf[l++] = i, buf[l++] = j, buf[l++] = k; + for (i=0xf1; i<0xf4; i++) + for (j=0x80; j<0xc0; j++) + for (k=0x80; k<0xc0; k++) + buf[l++] = i, buf[l++] = j, buf[l++] = 0x80, buf[l++] = k; + buf[l++] = 0; + for (i=0; i<50; i++) + cs += mbstowcs(wbuf, buf, 500000); + free(wbuf); + free(buf); + return cs; +} + +size_t b_utf8_onebyone(void *dummy) +{ + char *buf; + wchar_t wc; + size_t i, j, k, l; + size_t cs; + mbstate_t st = {0}; + + setlocale(LC_CTYPE, "C.UTF-8") + || setlocale(LC_CTYPE, "en_US.UTF-8") + || setlocale(LC_CTYPE, "en_GB.UTF-8") + || setlocale(LC_CTYPE, "en.UTF-8") + || setlocale(LC_CTYPE, "de_DE-8") + || setlocale(LC_CTYPE, "fr_FR-8"); + if (strcmp(nl_langinfo(CODESET), "UTF-8")) return -1; + + buf = malloc(500000); + l = 0; + for (i=0xc3; i<0xe0; i++) + for (j=0x80; j<0xc0; j++) + buf[l++] = i, buf[l++] = j; + for (i=0xe1; i<0xed; i++) + for (j=0x80; j<0xc0; j++) + for (k=0x80; k<0xc0; k++) + buf[l++] = i, buf[l++] = j, buf[l++] = k; + for (i=0xf1; i<0xf4; i++) + for (j=0x80; j<0xc0; j++) + for (k=0x80; k<0xc0; k++) + buf[l++] = i, buf[l++] = j, buf[l++] = 0x80, buf[l++] = k; + buf[l++] = 0; + for (i=0; i<50; i++) { + for (j=0; buf[j]; j+=mbrtowc(&wc, buf+j, 4, &st)); + } + free(buf); + return cs; +} -- cgit v1.2.1