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