cvs: /php4 TODO /php4/ext/standard php_string.h string.c
| From: | Andrei Zmievski | 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)