byte-based C locale, phase 3: make MB_CUR_MAX variable to activate code
authorRich Felker <dalias@aerifal.cx>
Tue, 16 Jun 2015 06:18:00 +0000 (06:18 +0000)
committerRich Felker <dalias@aerifal.cx>
Tue, 16 Jun 2015 06:18:00 +0000 (06:18 +0000)
this patch activates the new byte-based C locale (high bytes treated
as abstract code unit "characters" rather than decoded as multibyte
characters) by making the value of MB_CUR_MAX depend on the active
locale. for the C locale, the LC_CTYPE category pointer is null,
yielding a value of 1. all other locales yield a value of 4.

include/stdlib.h
src/internal/locale_impl.h

index 97ce5a72852fe72facf3ac3279609872f4875a60..d2c911fcd7a3f2954dbb8a33b76651f29657f438 100644 (file)
@@ -76,7 +76,8 @@ size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t);
 #define EXIT_FAILURE 1
 #define EXIT_SUCCESS 0
 
-#define MB_CUR_MAX ((size_t)+4)
+size_t __ctype_get_mb_cur_max(void);
+#define MB_CUR_MAX (__ctype_get_mb_cur_max())
 
 #define RAND_MAX (0x7fffffff)
 
index 85db793312e81b120a73ce63548c3007b02475fb..f5e4d9b4ae00313c0057414baaa270bbc4554a20 100644 (file)
@@ -34,4 +34,7 @@ const char *__lctrans_cur(const char *);
 
 #define CURRENT_UTF8 (!!__pthread_self()->locale->cat[LC_CTYPE])
 
+#undef MB_CUR_MAX
+#define MB_CUR_MAX (CURRENT_UTF8 ? 4 : 1)
+
 #endif