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