summaryrefslogtreecommitdiff
path: root/lib/wcwidth.c
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2018-05-20 22:11:12 -0700
committerPádraig Brady <P@draigBrady.com>2018-06-23 19:55:33 -0700
commit79ff8c358f3d724b2b5d5cc890f96f05efbf6794 (patch)
treecc64a8025bed658d6a72cdee9708bb5bc20551e9 /lib/wcwidth.c
parente64f847aeecaea35ca494b8db31807de167caf69 (diff)
downloadgnulib-79ff8c358f3d724b2b5d5cc890f96f05efbf6794.tar.gz
wchar-single: a new module to enable optimizations in wchar replacements
* lib/mbrtowc.c (mbrtowc): Only check locale_charset() once if GNULIB_WCHAR_SINGLE is enabled. * lib/wcwidth.c (wcwidth): Likewise.
Diffstat (limited to 'lib/wcwidth.c')
-rw-r--r--lib/wcwidth.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/wcwidth.c b/lib/wcwidth.c
index 5fb090ec5d..d03a50f3eb 100644
--- a/lib/wcwidth.c
+++ b/lib/wcwidth.c
@@ -30,9 +30,20 @@ int
wcwidth (wchar_t wc)
#undef wcwidth
{
+ static int utf8_charset = -1;
+ static const char *encoding;
+
+#if GNULIB_WCHAR_SINGLE
+ if (utf8_charset == -1)
+#endif
+ {
+ encoding = locale_charset ();
+ utf8_charset = STREQ_OPT (encoding,
+ "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0);
+ }
+
/* In UTF-8 locales, use a Unicode aware width function. */
- const char *encoding = locale_charset ();
- if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
+ if (utf8_charset)
{
/* We assume that in a UTF-8 locale, a wide character is the same as a
Unicode character. */