aboutsummaryrefslogtreecommitdiff
path: root/libbb/unicode.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/unicode.c')
-rw-r--r--libbb/unicode.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/libbb/unicode.c b/libbb/unicode.c
index b2c28239b..d6fcf7a43 100644
--- a/libbb/unicode.c
+++ b/libbb/unicode.c
@@ -25,13 +25,15 @@ uint8_t unicode_status;
void FAST_FUNC init_unicode(void)
{
- /* In unicode, this is a one character string */
static const char unicode_0x394[] = { 0xce, 0x94, 0 };
+ size_t width;
if (unicode_status != UNICODE_UNKNOWN)
return;
-
- unicode_status = unicode_strlen(unicode_0x394) == 1 ? UNICODE_ON : UNICODE_OFF;
+ /* In unicode, this is a one character string */
+// can use unicode_strlen(string) too, but otherwise unicode_strlen() is unused
+ width = mbstowcs(NULL, unicode_0x394, INT_MAX);
+ unicode_status = (width == 1 ? UNICODE_ON : UNICODE_OFF);
}
#else
@@ -954,6 +956,7 @@ int FAST_FUNC unicode_bidi_is_neutral_wchar(wint_t wc)
/* The rest is mostly same for libc and for "homegrown" support */
+#if 0 // UNUSED
size_t FAST_FUNC unicode_strlen(const char *string)
{
size_t width = mbstowcs(NULL, string, INT_MAX);
@@ -961,6 +964,14 @@ size_t FAST_FUNC unicode_strlen(const char *string)
return strlen(string);
return width;
}
+#endif
+
+size_t FAST_FUNC unicode_strwidth(const char *string)
+{
+ uni_stat_t uni_stat;
+ printable_string(&uni_stat, string);
+ return uni_stat.unicode_width;
+}
static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char *src, unsigned width, int flags)
{