cvs: /php4 TODO /php4/ext/standard php_string.h string.c

From: Date: Mon, 13 Dec 1999 23:41:06 +0000
Subject: cvs: /php4 TODO /php4/ext/standard php_string.h string.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-7880@lists.php.net to get a copy of this message
andrei Mon Dec 13 18:41:06 1999 EDT Modified files: /php4 TODO /php4/ext/standard php_string.h string.c Log: Made strspn() and strcspn() binary-safe. # Please test if you can, especially cases with embedded chr(0). @ Made strspn() and strcspn() binary-safe. Index: php4/TODO diff -u php4/TODO:1.17 php4/TODO:1.18 --- php4/TODO:1.17 Mon Dec 13 14:42:25 1999 +++ php4/TODO Mon Dec 13 18:40:35 1999 @@ -25,7 +25,6 @@ ------------ * strpad() (Andrei) * NOT binary safe: - strcspn() strtok() basename() dirname() Index: php4/ext/standard/php_string.h diff -u php4/ext/standard/php_string.h:1.3 php4/ext/standard/php_string.h:1.4 --- php4/ext/standard/php_string.h:1.3 Sat Dec 11 14:51:04 1999 +++ php4/ext/standard/php_string.h Mon Dec 13 18:40:36 1999 @@ -29,7 +29,7 @@ */ -/* $Id: php_string.h,v 1.3 1999/12/11 19:51:04 andrei Exp $ */ +/* $Id: php_string.h,v 1.4 1999/12/13 23:40:36 andrei Exp $ */ /* Synced with php3 revision 1.43 1999-06-16 [ssb] */ @@ -102,6 +102,8 @@ extern PHPAPI void php_implode(pval *delim, pval *arr, pval *return_value); extern PHPAPI void php_explode(pval *delim, pval *str, pval *return_value); -PHPAPI inline char *php_memnstr(char *haystack, char *needle, int needle_len, char *end); +extern PHPAPI inline char *php_memnstr(char *haystack, char *needle, int needle_len, char *end); +extern PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end); +extern PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end); #endif /* _PHPSTRING_H */ Index: php4/ext/standard/string.c diff -u php4/ext/standard/string.c:1.71 php4/ext/standard/string.c:1.72 --- php4/ext/standard/string.c:1.71 Sat Dec 11 15:00:40 1999 +++ php4/ext/standard/string.c Mon Dec 13 18:40:36 1999 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.71 1999/12/11 20:00:40 andrei Exp $ */ +/* $Id: string.c,v 1.72 1999/12/13 23:40:36 andrei Exp $ */ /* Synced with php3 revision 1.193 1999-06-16 [ssb] */ @@ -86,14 +86,16 @@ Find length of initial segment consisting entirely of characters found in mask */ PHP_FUNCTION(strspn) { - pval **s1,**s2; + zval **s1,**s2; if (ARG_COUNT(ht)!=2 || getParametersEx(2, &s1, &s2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(s1); convert_to_string_ex(s2); - RETURN_LONG(strspn((*s1)->value.str.val,(*s2)->value.str.val)); + RETURN_LONG(php_strspn((*s1)->value.str.val, (*s2)->value.str.val, + (*s1)->value.str.val + (*s1)->value.str.len, + (*s2)->value.str.val + (*s2)->value.str.len)); } /* }}} */ @@ -108,7 +110,9 @@ } convert_to_string_ex(s1); convert_to_string_ex(s2); - RETURN_LONG(strcspn((*s1)->value.str.val,(*s2)->value.str.val)); + RETURN_LONG(php_strcspn((*s1)->value.str.val, (*s2)->value.str.val, + (*s1)->value.str.val + (*s1)->value.str.len, + (*s2)->value.str.val + (*s2)->value.str.len)); } /* }}} */ @@ -530,6 +534,36 @@ php_strtolower(s, s_len); php_strtolower(t, t_len); return php_memnstr(s, t, t_len, s + s_len); +} + +PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end) +{ + register const char *p = s1, *spanp; + register char c = *p; + +cont: + for (spanp = s2; p != s1_end && spanp != s2_end;) + if (*spanp++ == c) { + c = *(++p); + goto cont; + } + return (p - s1); +} + +PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end) +{ + register const char *p, *spanp; + register char c = *s1; + + for (p = s1;;) { + spanp = s2; + do { + if (*spanp == c || p == s1_end) + return (p - s1); + } while (spanp++ < s2_end); + c = *(++p); + } + /* NOTREACHED */ } /* {{{ proto string stristr(string haystack, string needle)

« previous php.version4 (#7880) next »