wctype.c (227753) | wctype.c (228269) |
---|---|
1/*- 2 * Copyright (c) 2002 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Copyright (c) 2011 The FreeBSD Foundation 6 * All rights reserved. 7 * Portions of this software were developed by David Chisnall 8 * under sponsorship from the FreeBSD Foundation. --- 16 unchanged lines hidden (view full) --- 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Copyright (c) 2011 The FreeBSD Foundation 6 * All rights reserved. 7 * Portions of this software were developed by David Chisnall 8 * under sponsorship from the FreeBSD Foundation. --- 16 unchanged lines hidden (view full) --- 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32#include <sys/cdefs.h> |
33__FBSDID("$FreeBSD: head/lib/libc/locale/wctype.c 227753 2011-11-20 14:45:42Z theraven $"); | 33__FBSDID("$FreeBSD: head/lib/libc/locale/wctype.c 228269 2011-12-05 00:00:47Z jilles $"); |
34 35#include <ctype.h> 36#include <string.h> 37#include <wctype.h> 38#include <xlocale.h> 39 40#undef iswctype 41int --- 10 unchanged lines hidden (view full) --- 52/* 53 * IMPORTANT: The 0 in the call to this function in wctype() must be changed to 54 * __get_locale() if wctype_l() is ever modified to actually use the locale 55 * parameter. 56 */ 57wctype_t 58wctype_l(const char *property, locale_t locale) 59{ | 34 35#include <ctype.h> 36#include <string.h> 37#include <wctype.h> 38#include <xlocale.h> 39 40#undef iswctype 41int --- 10 unchanged lines hidden (view full) --- 52/* 53 * IMPORTANT: The 0 in the call to this function in wctype() must be changed to 54 * __get_locale() if wctype_l() is ever modified to actually use the locale 55 * parameter. 56 */ 57wctype_t 58wctype_l(const char *property, locale_t locale) 59{ |
60 static const struct { 61 const char *name; 62 wctype_t mask; 63 } props[] = { 64 { "alnum", _CTYPE_A|_CTYPE_D }, 65 { "alpha", _CTYPE_A }, 66 { "blank", _CTYPE_B }, 67 { "cntrl", _CTYPE_C }, 68 { "digit", _CTYPE_D }, 69 { "graph", _CTYPE_G }, 70 { "lower", _CTYPE_L }, 71 { "print", _CTYPE_R }, 72 { "punct", _CTYPE_P }, 73 { "space", _CTYPE_S }, 74 { "upper", _CTYPE_U }, 75 { "xdigit", _CTYPE_X }, 76 { "ideogram", _CTYPE_I }, /* BSD extension */ 77 { "special", _CTYPE_T }, /* BSD extension */ 78 { "phonogram", _CTYPE_Q }, /* BSD extension */ 79 { "rune", 0xFFFFFF00L }, /* BSD extension */ 80 { NULL, 0UL }, /* Default */ | 60 const char *propnames = 61 "alnum\0" 62 "alpha\0" 63 "blank\0" 64 "cntrl\0" 65 "digit\0" 66 "graph\0" 67 "lower\0" 68 "print\0" 69 "punct\0" 70 "space\0" 71 "upper\0" 72 "xdigit\0" 73 "ideogram\0" /* BSD extension */ 74 "special\0" /* BSD extension */ 75 "phonogram\0" /* BSD extension */ 76 "rune\0"; /* BSD extension */ 77 static const wctype_t propmasks[] = { 78 _CTYPE_A|_CTYPE_D, 79 _CTYPE_A, 80 _CTYPE_B, 81 _CTYPE_C, 82 _CTYPE_D, 83 _CTYPE_G, 84 _CTYPE_L, 85 _CTYPE_R, 86 _CTYPE_P, 87 _CTYPE_S, 88 _CTYPE_U, 89 _CTYPE_X, 90 _CTYPE_I, 91 _CTYPE_T, 92 _CTYPE_Q, 93 0xFFFFFF00L |
81 }; | 94 }; |
82 int i; | 95 size_t len1, len2; 96 const char *p; 97 const wctype_t *q; |
83 | 98 |
84 i = 0; 85 while (props[i].name != NULL && strcmp(props[i].name, property) != 0) 86 i++; | 99 len1 = strlen(property); 100 q = propmasks; 101 for (p = propnames; (len2 = strlen(p)) != 0; p += len2 + 1) { 102 if (len1 == len2 && memcmp(property, p, len1) == 0) 103 return (*q); 104 q++; 105 } |
87 | 106 |
88 return (props[i].mask); | 107 return (0UL); |
89} 90 91wctype_t wctype(const char *property) 92{ 93 return wctype_l(property, 0); 94} | 108} 109 110wctype_t wctype(const char *property) 111{ 112 return wctype_l(property, 0); 113} |