masugata                Mon Jul 17 04:48:17 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/mbstring       mbstring.c 
  Log:
  added option parameter mb_strrpos( ).
  
http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?r1=1.224.2.22.2.8&r2=1.224.2.22.2.9&diff_format=u
Index: php-src/ext/mbstring/mbstring.c
diff -u php-src/ext/mbstring/mbstring.c:1.224.2.22.2.8 
php-src/ext/mbstring/mbstring.c:1.224.2.22.2.9
--- php-src/ext/mbstring/mbstring.c:1.224.2.22.2.8      Fri Jun 16 16:45:46 2006
+++ php-src/ext/mbstring/mbstring.c     Mon Jul 17 04:48:17 2006
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c,v 1.224.2.22.2.8 2006/06/16 16:45:46 masugata Exp $ */
+/* $Id: mbstring.c,v 1.224.2.22.2.9 2006/07/17 04:48:17 masugata Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
@@ -1632,7 +1632,7 @@
 }
 /* }}} */
 
-/* {{{ proto int mb_strrpos(string haystack, string needle [, string encoding])
+/* {{{ proto int mb_strrpos(string haystack, string needle [, int offset [, 
string encoding]])
    Find the last occurrence of a character in a string within another */
 PHP_FUNCTION(mb_strrpos)
 {
@@ -1640,6 +1640,10 @@
        mbfl_string haystack, needle;
        char *enc_name = NULL;
        int enc_name_len;
+       zval *zoffset;
+       long offset = 0, str_flg;
+       char *enc_name2 = NULL;
+       int enc_name_len2;
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
@@ -1648,10 +1652,51 @@
        needle.no_language = MBSTRG(current_language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", (char 
**)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name, 
&enc_name_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|zs", (char 
**)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, 
&enc_name, &enc_name_len) == FAILURE) {
                RETURN_FALSE;
        }
 
+       if(ZEND_NUM_ARGS() >= 3) {
+               if (Z_TYPE_P(zoffset) == IS_STRING) {
+                       enc_name2     = Z_STRVAL_P(zoffset);
+                       enc_name_len2 = Z_STRLEN_P(zoffset);
+                       str_flg       = 1;
+
+                       if (enc_name2 != NULL) {
+                               switch (*enc_name2) {
+                               case '0':
+                               case '1':
+                               case '2':
+                               case '3':
+                               case '4':
+                               case '5':
+                               case '6':
+                               case '7':
+                               case '8':
+                               case '9':
+                               case ' ':
+                               case '-':
+                               case '.':
+                                       break;
+                               default :
+                                       str_flg = 0;
+                                       break;
+                               }
+                       }
+
+                       if(str_flg) {
+                                       convert_to_long(zoffset);
+                                       offset   = Z_LVAL_P(zoffset);
+                       } else {
+                               enc_name     = enc_name2;
+                               enc_name_len = enc_name_len2;
+                       }
+               } else {
+                       convert_to_long(zoffset);
+                       offset = Z_LVAL_P(zoffset);
+               }
+       }
+
        if (enc_name != NULL) {
                haystack.no_encoding = needle.no_encoding = 
mbfl_name2no_encoding(enc_name);
                if (haystack.no_encoding == mbfl_no_encoding_invalid) {
@@ -1668,7 +1713,7 @@
                php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
                RETURN_FALSE;
        }
-       n = mbfl_strpos(&haystack, &needle, 0, 1);
+       n = mbfl_strpos(&haystack, &needle, offset, 1);
        if (n >= 0) {
                RETVAL_LONG(n);
        } else {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to