iswctype.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <wctype.h>
  2. #include <string.h>
  3. #define WCTYPE_ALNUM 1
  4. #define WCTYPE_ALPHA 2
  5. #define WCTYPE_BLANK 3
  6. #define WCTYPE_CNTRL 4
  7. #define WCTYPE_DIGIT 5
  8. #define WCTYPE_GRAPH 6
  9. #define WCTYPE_LOWER 7
  10. #define WCTYPE_PRINT 8
  11. #define WCTYPE_PUNCT 9
  12. #define WCTYPE_SPACE 10
  13. #define WCTYPE_UPPER 11
  14. #define WCTYPE_XDIGIT 12
  15. int iswctype(wint_t wc, wctype_t type)
  16. {
  17. switch (type) {
  18. case WCTYPE_ALNUM:
  19. return iswalnum(wc);
  20. case WCTYPE_ALPHA:
  21. return iswalpha(wc);
  22. case WCTYPE_BLANK:
  23. return iswblank(wc);
  24. case WCTYPE_CNTRL:
  25. return iswcntrl(wc);
  26. case WCTYPE_DIGIT:
  27. return iswdigit(wc);
  28. case WCTYPE_GRAPH:
  29. return iswgraph(wc);
  30. case WCTYPE_LOWER:
  31. return iswlower(wc);
  32. case WCTYPE_PRINT:
  33. return iswprint(wc);
  34. case WCTYPE_PUNCT:
  35. return iswpunct(wc);
  36. case WCTYPE_SPACE:
  37. return iswspace(wc);
  38. case WCTYPE_UPPER:
  39. return iswupper(wc);
  40. case WCTYPE_XDIGIT:
  41. return iswxdigit(wc);
  42. }
  43. return 0;
  44. }
  45. wctype_t wctype(const char *s)
  46. {
  47. int i;
  48. const char *p;
  49. /* order must match! */
  50. static const char names[] =
  51. "alnum\0" "alpha\0" "blank\0"
  52. "cntrl\0" "digit\0" "graph\0"
  53. "lower\0" "print\0" "punct\0"
  54. "space\0" "upper\0" "xdigit";
  55. for (i=1, p=names; *p; i++, p+=6)
  56. if (*s == *p && !strcmp(s, p))
  57. return i;
  58. return 0;
  59. }
  60. int __iswctype_l(wint_t c, wctype_t t, locale_t l)
  61. {
  62. return iswctype(c, t);
  63. }
  64. wctype_t __wctype_l(const char *s, locale_t l)
  65. {
  66. return wctype(s);
  67. }
  68. weak_alias(__iswctype_l, iswctype_l);
  69. weak_alias(__wctype_l, wctype_l);