summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/misc/wchar/wchar.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/libc/misc/wchar/wchar.c b/libc/misc/wchar/wchar.c
index 6bdc7c068..100ca19a8 100644
--- a/libc/misc/wchar/wchar.c
+++ b/libc/misc/wchar/wchar.c
@@ -68,6 +68,10 @@
* and consistency with the stds requirements that a printf format string by
* a valid multibyte string beginning and ending in it's initial shift state.
*
+ * Nov 5, 2002
+ *
+ * Forgot to change btowc and wctob when I changed the wc<->mb functions yesterday.
+ *
* Manuel
*/
@@ -146,9 +150,17 @@ wint_t btowc(int c)
#else /* __CTYPE_HAS_8_BIT_LOCALES */
- /* If we don't have 8-bit locale support, then this is trivial since
- * anything outside of 0-0x7f is illegal in C/POSIX and UTF-8 locales. */
- return (((unsigned int)c) < 0x80) ? c : WEOF;
+#ifdef __CTYPE_HAS_UTF_8_LOCALES
+ if (ENCODING == __ctype_encoding_utf8) {
+ return (((unsigned int)c) < 0x80) ? c : WEOF;
+ }
+#endif /* __CTYPE_HAS_UTF_8_LOCALES */
+
+#ifdef __UCLIBC_HAS_LOCALE__
+ assert(ENCODING == __ctype_encoding_7_bit);
+#endif
+
+ return (((unsigned int)c) <= UCHAR_MAX) ? c : WEOF;
#endif /* __CTYPE_HAS_8_BIT_LOCALES */
}
@@ -169,13 +181,17 @@ int wctob(wint_t c)
#else /* __CTYPE_HAS_8_BIT_LOCALES */
- /* If we don't have 8-bit locale support, then this is trivial since
- * anything outside of 0-0x7f is illegal in C/POSIX and UTF-8 locales. */
-
- /* TODO: need unsigned version of wint_t... */
-/* return (((unsigned int)c) < 0x80) ? c : WEOF; */
- return ((c >= 0) && (c < 0x80)) ? c : EOF;
+#ifdef __CTYPE_HAS_UTF_8_LOCALES
+ if (ENCODING == __ctype_encoding_utf8) {
+ return ((c >= 0) && (c < 0x80)) ? c : EOF;
+ }
+#endif /* __CTYPE_HAS_UTF_8_LOCALES */
+
+#ifdef __UCLIBC_HAS_LOCALE__
+ assert(ENCODING == __ctype_encoding_7_bit);
+#endif
+ return ((c >= 0) && (c <= UCHAR_MAX)) ? c : EOF;
#endif /* __CTYPE_HAS_8_BIT_LOCALES */
}