diff --git a/src/util/unicode.c b/src/util/unicode.c index 6ae1a0676..98d9f2d07 100644 --- a/src/util/unicode.c +++ b/src/util/unicode.c @@ -35,22 +35,27 @@ int unicode_utf8_mkname(utf8_t * op, size_t outlen, const utf8_t * ip) { int ret = 0; + bool iss = true; while (*ip) { - ucs4_t ucs = *ip; size_t size = 1; bool isp = false; -// bool iss = false; - if (ucs & 0x80) { - ret = unicode_utf8_to_ucs4(&ucs, ip, &size); - if (ret !=0) { - return ret; - } - isp = iswprint(ucs); -// iss = iswspace(ucs); - } else { - isp = isprint(ucs); -// iss = isspace(ucs); - } + do { + ucs4_t ucs = *ip; + if (ucs & 0x80) { + ret = unicode_utf8_to_ucs4(&ucs, ip, &size); + if (ret !=0) { + return ret; + } + isp = iswprint(ucs); + iss &= !!iswspace(ucs); + } else { + isp = isprint(ucs); + iss &= !!isspace(ucs); + } + if (iss) { + ip += size; + } + } while (iss); if (size > outlen) { return ENOMEM; } diff --git a/src/util/unicode.test.c b/src/util/unicode.test.c index e70e03752..6d4f0fd67 100644 --- a/src/util/unicode.test.c +++ b/src/util/unicode.test.c @@ -8,9 +8,10 @@ static void test_unicode_mkname(CuTest * tc) { char buffer[32]; + CuAssertIntEquals(tc, 0, unicode_utf8_mkname(buffer, sizeof(buffer), " HeLlO W0Rld")); + CuAssertStrEquals(tc, "HeLlO W0Rld", buffer); CuAssertIntEquals(tc, 0, unicode_utf8_mkname(buffer, sizeof(buffer), "HeLlO W0Rld")); CuAssertStrEquals(tc, "HeLlO W0Rld", buffer); - memset(buffer, 0, sizeof(buffer)); CuAssertIntEquals(tc, 1, unicode_utf8_mkname(buffer, sizeof(buffer), "HeLlO\nW0Rld")); CuAssertStrEquals(tc, "HeLlOW0Rld", buffer); memset(buffer, 0, sizeof(buffer));