Fix iswlower/iswupper.
The previous conditions were just plain wrong.
Test: bionic tests
Change-Id: Ia6d98207b1ff98ea4c6f619912e4bcdb8a7fdd24
diff --git a/libc/bionic/wctype.cpp b/libc/bionic/wctype.cpp
index 3a880d3..cd8c39b 100644
--- a/libc/bionic/wctype.cpp
+++ b/libc/bionic/wctype.cpp
@@ -40,8 +40,12 @@
int iswblank(wint_t wc) { return isblank(wc); }
int iswdigit(wint_t wc) { return isdigit(wc); }
int iswgraph(wint_t wc) { return !iswspace(wc) && iswprint(wc); }
-int iswlower(wint_t wc) { return towlower(wc) != wc; }
-int iswupper(wint_t wc) { return towupper(wc) != wc; }
+int iswlower(wint_t wc) {
+ return towlower(wc) == wc && !(iswcntrl(wc) || iswdigit(wc) || iswpunct(wc) || iswspace(wc));
+}
+int iswupper(wint_t wc) {
+ return towupper(wc) == wc && !(iswcntrl(wc) || iswdigit(wc) || iswpunct(wc) || iswspace(wc));
+}
int iswxdigit(wint_t wc) { return isxdigit(wc); }
// TODO: need proper implementations of these.