]> git.saurik.com Git - apple/libc.git/blob - locale/FreeBSD/wctype.c.patch
Libc-594.1.4.tar.gz
[apple/libc.git] / locale / FreeBSD / wctype.c.patch
1 --- wctype.c.orig 2005-10-17 23:42:33.000000000 -0700
2 +++ wctype.c 2005-10-17 23:44:47.000000000 -0700
3 @@ -27,48 +27,63 @@
4 #include <sys/cdefs.h>
5 __FBSDID("$FreeBSD: src/lib/libc/locale/wctype.c,v 1.3 2004/03/27 08:59:21 tjr Exp $");
6
7 +#include "xlocale_private.h"
8 +
9 #include <ctype.h>
10 #include <string.h>
11 #include <wctype.h>
12 +#include <limits.h>
13
14 -#undef iswctype
15 -int
16 -iswctype(wint_t wc, wctype_t charclass)
17 -{
18 -
19 - return (__istype(wc, charclass));
20 -}
21 +static struct {
22 + const char *name;
23 + wctype_t mask;
24 +} props[] = {
25 + { "alnum", _CTYPE_A|_CTYPE_D },
26 + { "alpha", _CTYPE_A },
27 + { "blank", _CTYPE_B },
28 + { "cntrl", _CTYPE_C },
29 + { "digit", _CTYPE_D },
30 + { "graph", _CTYPE_G },
31 + { "lower", _CTYPE_L },
32 + { "print", _CTYPE_R },
33 + { "punct", _CTYPE_P },
34 + { "space", _CTYPE_S },
35 + { "upper", _CTYPE_U },
36 + { "xdigit", _CTYPE_X },
37 + { "ideogram", _CTYPE_I }, /* BSD extension */
38 + { "special", _CTYPE_T }, /* BSD extension */
39 + { "phonogram", _CTYPE_Q }, /* BSD extension */
40 + { "rune", 0xFFFFFFF0L }, /* BSD extension */
41 + { NULL, 0UL }, /* Default */
42 +};
43
44 wctype_t
45 -wctype(const char *property)
46 +wctype_l(const char *property, locale_t loc)
47 {
48 - struct {
49 - const char *name;
50 - wctype_t mask;
51 - } props[] = {
52 - { "alnum", _CTYPE_A|_CTYPE_D },
53 - { "alpha", _CTYPE_A },
54 - { "blank", _CTYPE_B },
55 - { "cntrl", _CTYPE_C },
56 - { "digit", _CTYPE_D },
57 - { "graph", _CTYPE_G },
58 - { "lower", _CTYPE_L },
59 - { "print", _CTYPE_R },
60 - { "punct", _CTYPE_P },
61 - { "space", _CTYPE_S },
62 - { "upper", _CTYPE_U },
63 - { "xdigit", _CTYPE_X },
64 - { "ideogram", _CTYPE_I }, /* BSD extension */
65 - { "special", _CTYPE_T }, /* BSD extension */
66 - { "phonogram", _CTYPE_Q }, /* BSD extension */
67 - { "rune", 0xFFFFFF00L }, /* BSD extension */
68 - { NULL, 0UL }, /* Default */
69 - };
70 int i;
71 + _RuneLocale *rl;
72
73 i = 0;
74 while (props[i].name != NULL && strcmp(props[i].name, property) != 0)
75 i++;
76
77 - return (props[i].mask);
78 + if (props[i].mask)
79 + return (props[i].mask);
80 +
81 + NORMALIZE_LOCALE(loc);
82 + rl = &loc->__lc_ctype->_CurrentRuneLocale;
83 + if ((i = rl->__ncharclasses) > 0) {
84 + _RuneCharClass *rp;
85 + for (rp = rl->__charclasses; i-- > 0; rp++) {
86 + if (strncmp(rp->__name, property, CHARCLASS_NAME_MAX) == 0)
87 + return (rp->__mask);
88 + }
89 + }
90 + return 0;
91 +}
92 +
93 +wctype_t
94 +wctype(const char *property)
95 +{
96 + return wctype_l(property, __current_locale());
97 }