@@ -86,14 +86,16 @@ PHP_FUNCTION(bin2hex)
86
86
Find length of initial segment consisting entirely of characters found in mask */
87
87
PHP_FUNCTION (strspn )
88
88
{
89
- pval * * s1 ,* * s2 ;
89
+ zval * * s1 ,* * s2 ;
90
90
91
91
if (ARG_COUNT (ht )!= 2 || getParametersEx (2 , & s1 , & s2 ) == FAILURE ) {
92
92
WRONG_PARAM_COUNT ;
93
93
}
94
94
convert_to_string_ex (s1 );
95
95
convert_to_string_ex (s2 );
96
- RETURN_LONG (strspn ((* s1 )-> value .str .val ,(* s2 )-> value .str .val ));
96
+ RETURN_LONG (php_strspn ((* s1 )-> value .str .val , (* s2 )-> value .str .val ,
97
+ (* s1 )-> value .str .val + (* s1 )-> value .str .len ,
98
+ (* s2 )-> value .str .val + (* s2 )-> value .str .len ));
97
99
}
98
100
/* }}} */
99
101
@@ -108,7 +110,9 @@ PHP_FUNCTION(strcspn)
108
110
}
109
111
convert_to_string_ex (s1 );
110
112
convert_to_string_ex (s2 );
111
- RETURN_LONG (strcspn ((* s1 )-> value .str .val ,(* s2 )-> value .str .val ));
113
+ RETURN_LONG (php_strcspn ((* s1 )-> value .str .val , (* s2 )-> value .str .val ,
114
+ (* s1 )-> value .str .val + (* s1 )-> value .str .len ,
115
+ (* s2 )-> value .str .val + (* s2 )-> value .str .len ));
112
116
}
113
117
/* }}} */
114
118
@@ -532,6 +536,36 @@ PHPAPI char *php_stristr(unsigned char *s, unsigned char *t,
532
536
return php_memnstr (s , t , t_len , s + s_len );
533
537
}
534
538
539
+ PHPAPI size_t php_strspn (char * s1 , char * s2 , char * s1_end , char * s2_end )
540
+ {
541
+ register const char * p = s1 , * spanp ;
542
+ register char c = * p ;
543
+
544
+ cont :
545
+ for (spanp = s2 ; p != s1_end && spanp != s2_end ;)
546
+ if (* spanp ++ == c ) {
547
+ c = * (++ p );
548
+ goto cont ;
549
+ }
550
+ return (p - s1 );
551
+ }
552
+
553
+ PHPAPI size_t php_strcspn (char * s1 , char * s2 , char * s1_end , char * s2_end )
554
+ {
555
+ register const char * p , * spanp ;
556
+ register char c = * s1 ;
557
+
558
+ for (p = s1 ;;) {
559
+ spanp = s2 ;
560
+ do {
561
+ if (* spanp == c || p == s1_end )
562
+ return (p - s1 );
563
+ } while (spanp ++ < s2_end );
564
+ c = * (++ p );
565
+ }
566
+ /* NOTREACHED */
567
+ }
568
+
535
569
/* {{{ proto string stristr(string haystack, string needle)
536
570
Find first occurrence of a string within another, case insensitive */
537
571
PHP_FUNCTION (stristr )
0 commit comments