X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/0ee27791cef1166e467dc0b3eba88656d835ab32..02e6afe4c4956fd667dfefc04e8f129b5b84f709:/t/nls/mbswidth.c diff --git a/t/nls/mbswidth.c b/t/nls/mbswidth.c new file mode 100644 index 0000000..e8e7c33 --- /dev/null +++ b/t/nls/mbswidth.c @@ -0,0 +1,50 @@ +/* + * Copyright © 2023 Nick Bowler + * + * Simplified mbsnwidth for test purposes. + * + * License WTFPL2: Do What The Fuck You Want To Public License, version 2. + * This is free software: you are free to do what the fuck you want to. + * There is NO WARRANTY, to the extent permitted by law. + */ + +#include +#include +#include + +#include "mbswidth.h" + +int mbsnwidth(const char *buf, size_t buflen, int flags) +{ + static int initialized; + mbstate_t ps; + int ret = 0; + + if (!initialized) { + setlocale(LC_CTYPE, ""); + initialized = 1; + } + + memset(&ps, 0, sizeof ps); + while (buflen > 0) { + wchar_t wc; + size_t l; + int w; + + l = mbrtowc(&wc, buf, buflen, &ps); + if (l == (size_t)-1 || l == (size_t)-2) + return -1; + else if (l == 0) + break; + + buflen -= l; + buf += l; + + w = wcwidth(wc); + if (w < 0) + return -1; + ret += w; + } + + return ret; +}