masugata Thu Mar 30 15:43:54 2006 UTC Modified files: /php-src/ext/mbstring mbstring.c mbstring.h Log: added mb_stripos( ), mb_strripos( ). http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.c?r1=1.252&r2=1.253&diff_format=u Index: php-src/ext/mbstring/mbstring.c diff -u php-src/ext/mbstring/mbstring.c:1.252 php-src/ext/mbstring/mbstring.c:1.253 --- php-src/ext/mbstring/mbstring.c:1.252 Wed Mar 29 15:47:07 2006 +++ php-src/ext/mbstring/mbstring.c Thu Mar 30 15:43:54 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mbstring.c,v 1.252 2006/03/29 15:47:07 masugata Exp $ */ +/* $Id: mbstring.c,v 1.253 2006/03/30 15:43:54 masugata Exp $ */ /* * PHP 4 Multibyte String module "mbstring" @@ -173,6 +173,8 @@ {MB_OVERLOAD_STRING, "strlen", "mb_strlen", "mb_orig_strlen"}, {MB_OVERLOAD_STRING, "strpos", "mb_strpos", "mb_orig_strpos"}, {MB_OVERLOAD_STRING, "strrpos", "mb_strrpos", "mb_orig_strrpos"}, + {MB_OVERLOAD_STRING, "stripos", "mb_stripos", "mb_orig_stripos"}, + {MB_OVERLOAD_STRING, "strripos", "mb_strripos", "mb_orig_stripos"}, {MB_OVERLOAD_STRING, "strstr", "mb_strstr", "mb_orig_strstr"}, {MB_OVERLOAD_STRING, "strrchr", "mb_strrchr", "mb_orig_strrchr"}, {MB_OVERLOAD_STRING, "substr", "mb_substr", "mb_orig_substr"}, @@ -207,6 +209,8 @@ PHP_FE(mb_strlen, NULL) PHP_FE(mb_strpos, NULL) PHP_FE(mb_strrpos, NULL) + PHP_FE(mb_stripos, NULL) + PHP_FE(mb_strripos, NULL) PHP_FE(mb_strstr, NULL) PHP_FE(mb_strrchr, NULL) PHP_FE(mb_substr_count, NULL) @@ -1677,6 +1681,58 @@ } /* }}} */ +/* {{{ proto int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + Finds position of first occurrence of a string within another, case insensitive */ +PHP_FUNCTION(mb_stripos) +{ + int n; + long offset; + char *old_haystack, *old_needle; + char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding)); + int old_haystack_len, old_needle_len, from_encoding_len; + n = -1; + offset = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &old_haystack, &old_haystack_len, &old_needle, &old_needle_len, &offset, &from_encoding, &from_encoding_len ) == FAILURE) { + RETURN_FALSE; + } + + n = php_mb_stripos(0, old_haystack, old_haystack_len, old_needle, old_needle_len, offset, from_encoding TSRMLS_CC); + + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + Finds position of last occurrence of a string within another, case insensitive */ +PHP_FUNCTION(mb_strripos) +{ + int n; + long offset; + char *old_haystack, *old_needle; + char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding)); + int old_haystack_len, old_needle_len, from_encoding_len; + n = -1; + offset = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", &old_haystack, &old_haystack_len, &old_needle, &old_needle_len, &offset, &from_encoding, &from_encoding_len ) == FAILURE) { + RETURN_FALSE; + } + + n = php_mb_stripos(1, old_haystack, old_haystack_len, old_needle, old_needle_len, offset, from_encoding TSRMLS_CC); + + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + /* {{{ proto string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) Finds first occurrence of a string within another */ PHP_FUNCTION(mb_strstr) @@ -4008,6 +4064,71 @@ } /* }}} */ +/* {{{ MBSTRING_API int php_mb_stripos() + */ + +MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_len, char *old_needle, int old_needle_len, long offset, char *from_encoding TSRMLS_DC) +{ + int n; + mbfl_string haystack, needle; + n = -1; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(current_language); + haystack.no_encoding = MBSTRG(current_internal_encoding); + needle.no_language = MBSTRG(current_language); + needle.no_encoding = MBSTRG(current_internal_encoding); + + do { + haystack.val = php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, old_haystack, (size_t) old_haystack_len, &haystack.len, from_encoding TSRMLS_CC); + + if (!haystack.val) { + break; + } + + if (haystack.len <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty haystack"); + break; + } + + needle.val = php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, old_needle, (size_t) old_needle_len, &needle.len, from_encoding TSRMLS_CC); + + if (!needle.val) { + break; + } + + if (needle.len <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle"); + break; + } + + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(from_encoding); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", from_encoding); + break; + } + + if (offset < 0 || (unsigned long)offset > haystack.len) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is out of range"); + break; + } + + n = mbfl_strpos(&haystack, &needle, offset, mode); + } while(0); + + if(haystack.val){ + efree(haystack.val); + } + + if(needle.val){ + efree(needle.val); + } + + return n; +} +/* }}} */ + #ifdef ZEND_MULTIBYTE /* {{{ MBSTRING_API int php_mb_set_zend_encoding() */ MBSTRING_API int php_mb_set_zend_encoding(TSRMLS_D) http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/mbstring.h?r1=1.74&r2=1.75&diff_format=u Index: php-src/ext/mbstring/mbstring.h diff -u php-src/ext/mbstring/mbstring.h:1.74 php-src/ext/mbstring/mbstring.h:1.75 --- php-src/ext/mbstring/mbstring.h:1.74 Wed Mar 29 15:47:07 2006 +++ php-src/ext/mbstring/mbstring.h Thu Mar 30 15:43:54 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mbstring.h,v 1.74 2006/03/29 15:47:07 masugata Exp $ */ +/* $Id: mbstring.h,v 1.75 2006/03/30 15:43:54 masugata Exp $ */ /* * PHP 4 Multibyte String module "mbstring" (currently only for Japanese) @@ -104,6 +104,8 @@ PHP_FUNCTION(mb_strlen); PHP_FUNCTION(mb_strpos); PHP_FUNCTION(mb_strrpos); +PHP_FUNCTION(mb_stripos); +PHP_FUNCTION(mb_strripos); PHP_FUNCTION(mb_strstr); PHP_FUNCTION(mb_strrchr); PHP_FUNCTION(mb_substr_count); @@ -155,6 +157,8 @@ MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC); +MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_len, char *old_needle, int old_needle_len, long offset, char *from_encoding TSRMLS_DC); + ZEND_BEGIN_MODULE_GLOBALS(mbstring) enum mbfl_no_language language; enum mbfl_no_language current_language;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php