The combination of g_unichar_iszerowidth and
g_unichar_iswide is sufficient to replicate the logic
of wcwidth() for libvirt.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
tests/vshtabletest.c | 8 ++------
tools/vsh-table.c | 2 +-
2 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/tests/vshtabletest.c b/tests/vshtabletest.c
index f2e0554f0a..54498b8a5a 100644
--- a/tests/vshtabletest.c
+++ b/tests/vshtabletest.c
@@ -155,14 +155,12 @@ testUnicodeArabic(const void *opaque G_GNUC_UNUSED)
" 1 ﻉﺪﻴﻟ ﺎﻠﺜﻘﻴﻟ ﻕﺎﻣ ﻊﻧ, ٣٠ ﻎﻴﻨﻳﺍ ﻮﺘﻧﺎﻤﺗ ﺎﻠﺛﺎﻠﺛ، ﺄﺳﺭ, ﺩﻮﻟ ﺩﻮﻟ.
ﺄﻣﺎﻣ ﺍ ﺎﻧ ﻲﻜﻧ\n"
" ﺺﻔﺣﺓ ﺖﻜﺘﻴﻛﺍً ﻊﻟ, ﺎﻠﺠﻧﻭﺩ ﻭﺎﻠﻌﺗﺍﺩ
ﺵﺭ\n";
vshTablePtr table;
- wchar_t wc;
/* If this char is not classed as printable, the actual
* output won't match what this test expects. The code
* is still operating correctly, but we have different
* layout */
- mbrtowc(&wc, "،", MB_CUR_MAX, NULL);
- if (!iswprint(wc))
+ if (!g_unichar_isprint(g_utf8_get_char(",")))
return EXIT_AM_SKIP;
table = vshTableNew("ﻡﺍ ﻢﻣﺍ ﻕﺎﺌﻣﺓ", "ﺓ ﺎﻠﺼﻋ", "ﺍﻸﺜﻧﺎﻧ",
NULL);
@@ -197,14 +195,12 @@ testUnicodeZeroWidthChar(const void *opaque G_GNUC_UNUSED)
" 1\u200B fedora28 run\u200Bning\n"
" 2 rhel7.5 running\n";
char *act = NULL;
- wchar_t wc;
/* If this char is not classed as printable, the actual
* output won't match what this test expects. The code
* is still operating correctly, but we have different
* layout */
- mbrtowc(&wc, "\u200B", MB_CUR_MAX, NULL);
- if (!iswprint(wc))
+ if (!g_unichar_isprint(g_utf8_get_char("\u200B")))
return EXIT_AM_SKIP;
table = vshTableNew("I\u200Bd", "Name", "\u200BStatus",
NULL);
diff --git a/tools/vsh-table.c b/tools/vsh-table.c
index a2365b2c32..e21514e86f 100644
--- a/tools/vsh-table.c
+++ b/tools/vsh-table.c
@@ -261,7 +261,7 @@ vshTableSafeEncode(const char *s, size_t *width)
} else {
memcpy(buf, p, len);
buf += len;
- *width += wcwidth(wc);
+ *width += g_unichar_iszerowidth(wc) ? 0 : (g_unichar_iswide(wc) ? 2 :
1);
}
p += len;
}
--
2.24.1