xref: /openbsd-src/lib/libc/gen/isctype.c (revision 0967fc9724201c70476ea058c9f648ae75d0c9ed)
1 /*	$OpenBSD: isctype.c,v 1.13 2024/02/04 13:03:18 jca Exp $ */
2 /*
3  * Copyright (c) 1989 The Regents of the University of California.
4  * All rights reserved.
5  * (c) UNIX System Laboratories, Inc.
6  * All or some portions of this file are derived from material licensed
7  * to the University of California by American Telephone and Telegraph
8  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
9  * the permission of UNIX System Laboratories, Inc.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. Neither the name of the University nor the names of its contributors
20  *    may be used to endorse or promote products derived from this software
21  *    without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  */
35 
36 #define _ANSI_LIBRARY
37 #include <ctype.h>
38 #include <stdio.h>
39 
40 #undef isalnum
41 int
isalnum(int c)42 isalnum(int c)
43 {
44 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
45 	    (_CTYPE_U|_CTYPE_L|_CTYPE_N)));
46 }
47 DEF_STRONG(isalnum);
48 
49 #undef isalpha
50 int
isalpha(int c)51 isalpha(int c)
52 {
53 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
54 	    (_CTYPE_U|_CTYPE_L)));
55 }
56 DEF_STRONG(isalpha);
57 
58 #undef isblank
59 int
isblank(int c)60 isblank(int c)
61 {
62 	return (c == ' ' || c == '\t');
63 }
64 DEF_STRONG(isblank);
65 
66 #undef iscntrl
67 int
iscntrl(int c)68 iscntrl(int c)
69 {
70 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_C));
71 }
72 DEF_STRONG(iscntrl);
73 
74 #undef isdigit
75 int
isdigit(int c)76 isdigit(int c)
77 {
78 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_N));
79 }
80 DEF_STRONG(isdigit);
81 
82 #undef isgraph
83 int
isgraph(int c)84 isgraph(int c)
85 {
86 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
87 	    (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N)));
88 }
89 DEF_STRONG(isgraph);
90 
91 #undef islower
92 int
islower(int c)93 islower(int c)
94 {
95 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_L));
96 }
97 DEF_STRONG(islower);
98 
99 #undef isprint
100 int
isprint(int c)101 isprint(int c)
102 {
103 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
104 	    (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B)));
105 }
106 DEF_STRONG(isprint);
107 
108 #undef ispunct
109 int
ispunct(int c)110 ispunct(int c)
111 {
112 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_P));
113 }
114 DEF_STRONG(ispunct);
115 
116 #undef isspace
117 int
isspace(int c)118 isspace(int c)
119 {
120 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_S));
121 }
122 DEF_STRONG(isspace);
123 
124 #undef isupper
125 int
isupper(int c)126 isupper(int c)
127 {
128 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_U));
129 }
130 DEF_STRONG(isupper);
131 
132 #undef isxdigit
133 int
isxdigit(int c)134 isxdigit(int c)
135 {
136 	return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
137 	    (_CTYPE_N|_CTYPE_X)));
138 }
139 DEF_STRONG(isxdigit);
140 
141 #undef isascii
142 int
isascii(int c)143 isascii(int c)
144 {
145 	return ((unsigned int)c <= 0177);
146 }
147 DEF_WEAK(isascii);
148 
149 #undef toascii
150 int
toascii(int c)151 toascii(int c)
152 {
153 	return (c & 0177);
154 }
155 
156 #undef _toupper
157 int
_toupper(int c)158 _toupper(int c)
159 {
160 	return (c - 'a' + 'A');
161 }
162 
163 #undef _tolower
164 int
_tolower(int c)165 _tolower(int c)
166 {
167 	return (c - 'A' + 'a');
168 }
169