pollita Tue Dec 2 20:11:37 2003 EDT Modified files: /php-src/ext/standard string.c Log: Restore ability to use strrpos/strripos with an ordinal needle Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.402 php-src/ext/standard/string.c:1.403 --- php-src/ext/standard/string.c:1.402 Mon Dec 1 18:17:22 2003 +++ php-src/ext/standard/string.c Tue Dec 2 20:11:36 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.402 2003/12/01 23:17:22 iliaa Exp $ */ +/* $Id: string.c,v 1.403 2003/12/03 01:11:36 pollita Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -1570,14 +1570,26 @@ Finds position of last occurrence of a string within another string */ PHP_FUNCTION(strrpos) { + zval *zneedle; char *needle, *haystack; int needle_len, haystack_len, offset = 0; - char *p, *e; + char *p, *e, ord_needle[2]; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &haystack, &haystack_len, &needle, &needle_len, &offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &zneedle, &offset) == FAILURE) { RETURN_FALSE; } + if (Z_TYPE_P(zneedle) == IS_STRING) { + needle = Z_STRVAL_P(zneedle); + needle_len = Z_STRLEN_P(zneedle); + } else { + convert_to_long(zneedle); + ord_needle[0] = (char)(Z_LVAL_P(zneedle) & 0xFF); + ord_needle[1] = '\0'; + needle = ord_needle; + needle_len = 1; + } + if ((haystack_len == 0) || (needle_len == 0)) { RETURN_FALSE; } @@ -1609,15 +1621,27 @@ Finds position of last occurrence of a string within another string */ PHP_FUNCTION(strripos) { + zval *zneedle; char *needle, *haystack; int needle_len, haystack_len, offset = 0; - char *p, *e; + char *p, *e, ord_needle[2]; char *needle_dup, *haystack_dup; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &haystack, &haystack_len, &needle, &needle_len, &offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &zneedle, &offset) == FAILURE) { RETURN_FALSE; } + if (Z_TYPE_P(zneedle) == IS_STRING) { + needle = Z_STRVAL_P(zneedle); + needle_len = Z_STRLEN_P(zneedle); + } else { + convert_to_long(zneedle); + ord_needle[0] = (char)(Z_LVAL_P(zneedle) & 0xFF); + ord_needle[1] = '\0'; + needle = ord_needle; + needle_len = 1; + } + if ((haystack_len == 0) || (needle_len == 0)) { RETURN_FALSE; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php