@@ -61,113 +61,114 @@ static PHP_MINFO_FUNCTION(ctype)
61
61
}
62
62
/* }}} */
63
63
64
- /* {{{ ctype */
65
- #define CTYPE (iswhat , allow_digits , allow_minus ) \
66
- zval *c; \
67
- ZEND_PARSE_PARAMETERS_START(1, 1); \
68
- Z_PARAM_ZVAL(c) \
69
- ZEND_PARSE_PARAMETERS_END(); \
70
- if (Z_TYPE_P(c) == IS_LONG) { \
71
- if (Z_LVAL_P(c) <= 255 && Z_LVAL_P(c) >= 0) { \
72
- RETURN_BOOL(iswhat((int)Z_LVAL_P(c))); \
73
- } else if (Z_LVAL_P(c) >= -128 && Z_LVAL_P(c) < 0) { \
74
- RETURN_BOOL(iswhat((int)Z_LVAL_P(c) + 256)); \
75
- } else if (Z_LVAL_P(c) >= 0) { \
76
- RETURN_BOOL(allow_digits); \
77
- } else { \
78
- RETURN_BOOL(allow_minus); \
79
- } \
80
- } else if (Z_TYPE_P(c) == IS_STRING) { \
81
- char *p = Z_STRVAL_P(c), *e = Z_STRVAL_P(c) + Z_STRLEN_P(c); \
82
- if (e == p) { \
83
- RETURN_FALSE; \
84
- } \
85
- while (p < e) { \
86
- if(!iswhat((int)*(unsigned char *)(p++))) { \
87
- RETURN_FALSE; \
88
- } \
89
- } \
90
- RETURN_TRUE; \
91
- } else { \
92
- RETURN_FALSE; \
93
- } \
94
-
95
- /* }}} */
64
+ static void ctype_impl (
65
+ INTERNAL_FUNCTION_PARAMETERS , int (* iswhat )(int ), bool allow_digits , bool allow_minus ) {
66
+ zval * c ;
67
+
68
+ ZEND_PARSE_PARAMETERS_START (1 , 1 );
69
+ Z_PARAM_ZVAL (c )
70
+ ZEND_PARSE_PARAMETERS_END ();
71
+
72
+ if (Z_TYPE_P (c ) == IS_LONG ) {
73
+ if (Z_LVAL_P (c ) <= 255 && Z_LVAL_P (c ) >= 0 ) {
74
+ RETURN_BOOL (iswhat ((int )Z_LVAL_P (c )));
75
+ } else if (Z_LVAL_P (c ) >= -128 && Z_LVAL_P (c ) < 0 ) {
76
+ RETURN_BOOL (iswhat ((int )Z_LVAL_P (c ) + 256 ));
77
+ } else if (Z_LVAL_P (c ) >= 0 ) {
78
+ RETURN_BOOL (allow_digits );
79
+ } else {
80
+ RETURN_BOOL (allow_minus );
81
+ }
82
+ } else if (Z_TYPE_P (c ) == IS_STRING ) {
83
+ char * p = Z_STRVAL_P (c ), * e = Z_STRVAL_P (c ) + Z_STRLEN_P (c );
84
+ if (e == p ) {
85
+ RETURN_FALSE ;
86
+ }
87
+ while (p < e ) {
88
+ if (!iswhat ((int )* (unsigned char * )(p ++ ))) {
89
+ RETURN_FALSE ;
90
+ }
91
+ }
92
+ RETURN_TRUE ;
93
+ } else {
94
+ RETURN_FALSE ;
95
+ }
96
+ }
96
97
97
98
/* {{{ Checks for alphanumeric character(s) */
98
99
PHP_FUNCTION (ctype_alnum )
99
100
{
100
- CTYPE ( isalnum , 1 , 0 );
101
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isalnum , 1 , 0 );
101
102
}
102
103
/* }}} */
103
104
104
105
/* {{{ Checks for alphabetic character(s) */
105
106
PHP_FUNCTION (ctype_alpha )
106
107
{
107
- CTYPE ( isalpha , 0 , 0 );
108
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isalpha , 0 , 0 );
108
109
}
109
110
/* }}} */
110
111
111
112
/* {{{ Checks for control character(s) */
112
113
PHP_FUNCTION (ctype_cntrl )
113
114
{
114
- CTYPE ( iscntrl , 0 , 0 );
115
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , iscntrl , 0 , 0 );
115
116
}
116
117
/* }}} */
117
118
118
119
/* {{{ Checks for numeric character(s) */
119
120
PHP_FUNCTION (ctype_digit )
120
121
{
121
- CTYPE ( isdigit , 1 , 0 );
122
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isdigit , 1 , 0 );
122
123
}
123
124
/* }}} */
124
125
125
126
/* {{{ Checks for lowercase character(s) */
126
127
PHP_FUNCTION (ctype_lower )
127
128
{
128
- CTYPE ( islower , 0 , 0 );
129
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , islower , 0 , 0 );
129
130
}
130
131
/* }}} */
131
132
132
133
/* {{{ Checks for any printable character(s) except space */
133
134
PHP_FUNCTION (ctype_graph )
134
135
{
135
- CTYPE ( isgraph , 1 , 1 );
136
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isgraph , 1 , 1 );
136
137
}
137
138
/* }}} */
138
139
139
140
/* {{{ Checks for printable character(s) */
140
141
PHP_FUNCTION (ctype_print )
141
142
{
142
- CTYPE ( isprint , 1 , 1 );
143
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isprint , 1 , 1 );
143
144
}
144
145
/* }}} */
145
146
146
147
/* {{{ Checks for any printable character which is not whitespace or an alphanumeric character */
147
148
PHP_FUNCTION (ctype_punct )
148
149
{
149
- CTYPE ( ispunct , 0 , 0 );
150
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , ispunct , 0 , 0 );
150
151
}
151
152
/* }}} */
152
153
153
154
/* {{{ Checks for whitespace character(s)*/
154
155
PHP_FUNCTION (ctype_space )
155
156
{
156
- CTYPE ( isspace , 0 , 0 );
157
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isspace , 0 , 0 );
157
158
}
158
159
/* }}} */
159
160
160
161
/* {{{ Checks for uppercase character(s) */
161
162
PHP_FUNCTION (ctype_upper )
162
163
{
163
- CTYPE ( isupper , 0 , 0 );
164
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isupper , 0 , 0 );
164
165
}
165
166
/* }}} */
166
167
167
168
/* {{{ Checks for character(s) representing a hexadecimal digit */
168
169
PHP_FUNCTION (ctype_xdigit )
169
170
{
170
- CTYPE ( isxdigit , 1 , 0 );
171
+ ctype_impl ( INTERNAL_FUNCTION_PARAM_PASSTHRU , isxdigit , 1 , 0 );
171
172
}
172
173
/* }}} */
173
174
0 commit comments