Annotation of embedaddon/php/ext/ctype/ctype.c, revision 1.1.1.3

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
1.1.1.3 ! misho       5:    | Copyright (c) 1997-2014 The PHP Group                                |
1.1       misho       6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 3.01 of the PHP license,      |
                      8:    | that is bundled with this package in the file LICENSE, and is        |
                      9:    | available through the world-wide-web at the following url:           |
                     10:    | http://www.php.net/license/3_01.txt                                  |
                     11:    | If you did not receive a copy of the PHP license and are unable to   |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@php.net so we can mail you a copy immediately.               |
                     14:    +----------------------------------------------------------------------+
                     15:    | Author: Hartmut Holzgraefe <hholzgra@php.net>                        |
                     16:    +----------------------------------------------------------------------+
                     17:  */
                     18: 
                     19: #ifdef HAVE_CONFIG_H
                     20: #include "config.h"
                     21: #endif
                     22: 
                     23: #include "php.h"
                     24: #include "php_ini.h"
                     25: #include "php_ctype.h"
                     26: #include "SAPI.h"
                     27: #include "ext/standard/info.h"
                     28: 
                     29: #include <ctype.h>
                     30: 
                     31: #if HAVE_CTYPE
                     32: 
                     33: static PHP_MINFO_FUNCTION(ctype);
                     34: 
                     35: static PHP_FUNCTION(ctype_alnum);
                     36: static PHP_FUNCTION(ctype_alpha);
                     37: static PHP_FUNCTION(ctype_cntrl);
                     38: static PHP_FUNCTION(ctype_digit);
                     39: static PHP_FUNCTION(ctype_lower);
                     40: static PHP_FUNCTION(ctype_graph);
                     41: static PHP_FUNCTION(ctype_print);
                     42: static PHP_FUNCTION(ctype_punct);
                     43: static PHP_FUNCTION(ctype_space);
                     44: static PHP_FUNCTION(ctype_upper);
                     45: static PHP_FUNCTION(ctype_xdigit);
                     46: 
                     47: /* {{{ arginfo */
                     48: ZEND_BEGIN_ARG_INFO(arginfo_ctype_alnum, 0)
                     49:        ZEND_ARG_INFO(0, text)
                     50: ZEND_END_ARG_INFO()
                     51: 
                     52: ZEND_BEGIN_ARG_INFO(arginfo_ctype_alpha, 0)
                     53:        ZEND_ARG_INFO(0, text)
                     54: ZEND_END_ARG_INFO()
                     55: 
                     56: ZEND_BEGIN_ARG_INFO(arginfo_ctype_cntrl, 0)
                     57:        ZEND_ARG_INFO(0, text)
                     58: ZEND_END_ARG_INFO()
                     59: 
                     60: ZEND_BEGIN_ARG_INFO(arginfo_ctype_digit, 0)
                     61:        ZEND_ARG_INFO(0, text)
                     62: ZEND_END_ARG_INFO()
                     63: 
                     64: ZEND_BEGIN_ARG_INFO(arginfo_ctype_lower, 0)
                     65:        ZEND_ARG_INFO(0, text)
                     66: ZEND_END_ARG_INFO()
                     67: 
                     68: ZEND_BEGIN_ARG_INFO(arginfo_ctype_graph, 0)
                     69:        ZEND_ARG_INFO(0, text)
                     70: ZEND_END_ARG_INFO()
                     71: 
                     72: ZEND_BEGIN_ARG_INFO(arginfo_ctype_print, 0)
                     73:        ZEND_ARG_INFO(0, text)
                     74: ZEND_END_ARG_INFO()
                     75: 
                     76: ZEND_BEGIN_ARG_INFO(arginfo_ctype_punct, 0)
                     77:        ZEND_ARG_INFO(0, text)
                     78: ZEND_END_ARG_INFO()
                     79: 
                     80: ZEND_BEGIN_ARG_INFO(arginfo_ctype_space, 0)
                     81:        ZEND_ARG_INFO(0, text)
                     82: ZEND_END_ARG_INFO()
                     83: 
                     84: ZEND_BEGIN_ARG_INFO(arginfo_ctype_upper, 0)
                     85:        ZEND_ARG_INFO(0, text)
                     86: ZEND_END_ARG_INFO()
                     87: 
                     88: ZEND_BEGIN_ARG_INFO(arginfo_ctype_xdigit, 0)
                     89:        ZEND_ARG_INFO(0, text)
                     90: ZEND_END_ARG_INFO()
                     91: 
                     92: /* }}} */
                     93: 
                     94: /* {{{ ctype_functions[]
                     95:  * Every user visible function must have an entry in ctype_functions[].
                     96:  */
                     97: static const zend_function_entry ctype_functions[] = {
                     98:        PHP_FE(ctype_alnum,     arginfo_ctype_alnum)
                     99:        PHP_FE(ctype_alpha,     arginfo_ctype_alpha)
                    100:        PHP_FE(ctype_cntrl,     arginfo_ctype_cntrl)
                    101:        PHP_FE(ctype_digit,     arginfo_ctype_digit)
                    102:        PHP_FE(ctype_lower,     arginfo_ctype_lower)
                    103:        PHP_FE(ctype_graph,     arginfo_ctype_graph)
                    104:        PHP_FE(ctype_print,     arginfo_ctype_print)
                    105:        PHP_FE(ctype_punct,     arginfo_ctype_punct)
                    106:        PHP_FE(ctype_space,     arginfo_ctype_space)
                    107:        PHP_FE(ctype_upper,     arginfo_ctype_upper)
                    108:        PHP_FE(ctype_xdigit,    arginfo_ctype_xdigit)
                    109:        PHP_FE_END
                    110: };
                    111: /* }}} */
                    112: 
                    113: /* {{{ ctype_module_entry
                    114:  */
                    115: zend_module_entry ctype_module_entry = {
                    116:        STANDARD_MODULE_HEADER,
                    117:        "ctype",
                    118:        ctype_functions,
                    119:        NULL,
                    120:        NULL,
                    121:        NULL,
                    122:        NULL,
                    123:        PHP_MINFO(ctype),
                    124:     NO_VERSION_YET,
                    125:        STANDARD_MODULE_PROPERTIES
                    126: };
                    127: /* }}} */
                    128: 
                    129: #ifdef COMPILE_DL_CTYPE
                    130: ZEND_GET_MODULE(ctype)
                    131: #endif
                    132: 
                    133: /* {{{ PHP_MINFO_FUNCTION
                    134:  */
                    135: static PHP_MINFO_FUNCTION(ctype)
                    136: {
                    137:        php_info_print_table_start();
                    138:        php_info_print_table_row(2, "ctype functions", "enabled");
                    139:        php_info_print_table_end();
                    140: }
                    141: /* }}} */
                    142: 
                    143: /* {{{ ctype
                    144:  */
                    145: #define CTYPE(iswhat) \
                    146:        zval *c, tmp; \
                    147:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \
                    148:                return; \
                    149:        if (Z_TYPE_P(c) == IS_LONG) { \
                    150:                if (Z_LVAL_P(c) <= 255 && Z_LVAL_P(c) >= 0) { \
                    151:                        RETURN_BOOL(iswhat(Z_LVAL_P(c))); \
                    152:                } else if (Z_LVAL_P(c) >= -128 && Z_LVAL_P(c) < 0) { \
                    153:                        RETURN_BOOL(iswhat(Z_LVAL_P(c) + 256)); \
                    154:                } \
                    155:                tmp = *c; \
                    156:                zval_copy_ctor(&tmp); \
                    157:                convert_to_string(&tmp); \
                    158:        } else { \
                    159:                tmp = *c; \
                    160:        } \
                    161:        if (Z_TYPE(tmp) == IS_STRING) { \
                    162:                char *p = Z_STRVAL(tmp), *e = Z_STRVAL(tmp) + Z_STRLEN(tmp); \
                    163:                if (e == p) {   \
                    164:                        if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
                    165:                        RETURN_FALSE;   \
                    166:                }       \
                    167:                while (p < e) { \
                    168:                        if(!iswhat((int)*(unsigned char *)(p++))) { \
                    169:                                if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
                    170:                                RETURN_FALSE; \
                    171:                        } \
                    172:                } \
                    173:                if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
                    174:                RETURN_TRUE; \
                    175:        } else { \
                    176:                RETURN_FALSE; \
                    177:        } \
                    178: 
                    179: /* }}} */
                    180: 
                    181: /* {{{ proto bool ctype_alnum(mixed c)
                    182:    Checks for alphanumeric character(s) */
                    183: static PHP_FUNCTION(ctype_alnum)
                    184: {
                    185:        CTYPE(isalnum);
                    186: }
                    187: /* }}} */
                    188: 
                    189: /* {{{ proto bool ctype_alpha(mixed c)
                    190:    Checks for alphabetic character(s) */
                    191: static PHP_FUNCTION(ctype_alpha)
                    192: {
                    193:        CTYPE(isalpha);
                    194: }
                    195: /* }}} */
                    196: 
                    197: /* {{{ proto bool ctype_cntrl(mixed c)
                    198:    Checks for control character(s) */
                    199: static PHP_FUNCTION(ctype_cntrl)
                    200: {
                    201:        CTYPE(iscntrl);
                    202: }
                    203: /* }}} */
                    204: 
                    205: /* {{{ proto bool ctype_digit(mixed c)
                    206:    Checks for numeric character(s) */
                    207: static PHP_FUNCTION(ctype_digit)
                    208: {
                    209:        CTYPE(isdigit);
                    210: }
                    211: /* }}} */
                    212: 
                    213: /* {{{ proto bool ctype_lower(mixed c)
                    214:    Checks for lowercase character(s)  */
                    215: static PHP_FUNCTION(ctype_lower)
                    216: {
                    217:        CTYPE(islower);
                    218: }
                    219: /* }}} */
                    220: 
                    221: /* {{{ proto bool ctype_graph(mixed c)
                    222:    Checks for any printable character(s) except space */
                    223: static PHP_FUNCTION(ctype_graph)
                    224: {
                    225:        CTYPE(isgraph);
                    226: }
                    227: /* }}} */
                    228: 
                    229: /* {{{ proto bool ctype_print(mixed c)
                    230:    Checks for printable character(s) */
                    231: static PHP_FUNCTION(ctype_print)
                    232: {
                    233:        CTYPE(isprint);
                    234: }
                    235: /* }}} */
                    236: 
                    237: /* {{{ proto bool ctype_punct(mixed c)
                    238:    Checks for any printable character which is not whitespace or an alphanumeric character */
                    239: static PHP_FUNCTION(ctype_punct)
                    240: {
                    241:        CTYPE(ispunct);
                    242: }
                    243: /* }}} */
                    244: 
                    245: /* {{{ proto bool ctype_space(mixed c)
                    246:    Checks for whitespace character(s)*/
                    247: static PHP_FUNCTION(ctype_space)
                    248: {
                    249:        CTYPE(isspace);
                    250: }
                    251: /* }}} */
                    252: 
                    253: /* {{{ proto bool ctype_upper(mixed c)
                    254:    Checks for uppercase character(s) */
                    255: static PHP_FUNCTION(ctype_upper)
                    256: {
                    257:        CTYPE(isupper);
                    258: }
                    259: /* }}} */
                    260: 
                    261: /* {{{ proto bool ctype_xdigit(mixed c)
                    262:    Checks for character(s) representing a hexadecimal digit */
                    263: static PHP_FUNCTION(ctype_xdigit)
                    264: {
                    265:        CTYPE(isxdigit);
                    266: }
                    267: /* }}} */
                    268: 
                    269: #endif /* HAVE_CTYPE */
                    270: 
                    271: /*
                    272:  * Local variables:
                    273:  * tab-width: 4
                    274:  * c-basic-offset: 4
                    275:  * End:
                    276:  * vim600: sw=4 ts=4 fdm=marker
                    277:  * vim<600: sw=4 ts=4
                    278:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>