Index: fusl/src/ctype/iswctype.c |
diff --git a/fusl/src/ctype/iswctype.c b/fusl/src/ctype/iswctype.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3d9c2cc7c2d0703e51f77aa1e6d71f256d2a03a6 |
--- /dev/null |
+++ b/fusl/src/ctype/iswctype.c |
@@ -0,0 +1,76 @@ |
+#include <wctype.h> |
+#include <string.h> |
+#include "libc.h" |
+ |
+#define WCTYPE_ALNUM 1 |
+#define WCTYPE_ALPHA 2 |
+#define WCTYPE_BLANK 3 |
+#define WCTYPE_CNTRL 4 |
+#define WCTYPE_DIGIT 5 |
+#define WCTYPE_GRAPH 6 |
+#define WCTYPE_LOWER 7 |
+#define WCTYPE_PRINT 8 |
+#define WCTYPE_PUNCT 9 |
+#define WCTYPE_SPACE 10 |
+#define WCTYPE_UPPER 11 |
+#define WCTYPE_XDIGIT 12 |
+ |
+int iswctype(wint_t wc, wctype_t type) |
+{ |
+ switch (type) { |
+ case WCTYPE_ALNUM: |
+ return iswalnum(wc); |
+ case WCTYPE_ALPHA: |
+ return iswalpha(wc); |
+ case WCTYPE_BLANK: |
+ return iswblank(wc); |
+ case WCTYPE_CNTRL: |
+ return iswcntrl(wc); |
+ case WCTYPE_DIGIT: |
+ return iswdigit(wc); |
+ case WCTYPE_GRAPH: |
+ return iswgraph(wc); |
+ case WCTYPE_LOWER: |
+ return iswlower(wc); |
+ case WCTYPE_PRINT: |
+ return iswprint(wc); |
+ case WCTYPE_PUNCT: |
+ return iswpunct(wc); |
+ case WCTYPE_SPACE: |
+ return iswspace(wc); |
+ case WCTYPE_UPPER: |
+ return iswupper(wc); |
+ case WCTYPE_XDIGIT: |
+ return iswxdigit(wc); |
+ } |
+ return 0; |
+} |
+ |
+wctype_t wctype(const char *s) |
+{ |
+ int i; |
+ const char *p; |
+ /* order must match! */ |
+ static const char names[] = |
+ "alnum\0" "alpha\0" "blank\0" |
+ "cntrl\0" "digit\0" "graph\0" |
+ "lower\0" "print\0" "punct\0" |
+ "space\0" "upper\0" "xdigit"; |
+ for (i=1, p=names; *p; i++, p+=6) |
+ if (*s == *p && !strcmp(s, p)) |
+ return i; |
+ return 0; |
+} |
+ |
+int __iswctype_l(wint_t c, wctype_t t, locale_t l) |
+{ |
+ return iswctype(c, t); |
+} |
+ |
+wctype_t __wctype_l(const char *s, locale_t l) |
+{ |
+ return wctype(s); |
+} |
+ |
+weak_alias(__iswctype_l, iswctype_l); |
+weak_alias(__wctype_l, wctype_l); |