cvs: /php4/ext/standard string.c

From: Date: Mon, 06 Dec 1999 18:29:53 +0000
Subject: cvs: /php4/ext/standard string.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-7543@lists.php.net to get a copy of this message
thies Mon Dec 6 13:29:53 1999 EDT Modified files: /php4/ext/standard string.c Log: @- explode() is now binary-safe. (Thies) we save one buffer-copy as well (hehe) Index: php4/ext/standard/string.c diff -u php4/ext/standard/string.c:1.64 php4/ext/standard/string.c:1.65 --- php4/ext/standard/string.c:1.64 Mon Dec 6 12:37:59 1999 +++ php4/ext/standard/string.c Mon Dec 6 13:29:22 1999 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.64 1999/12/06 17:37:59 thies Exp $ */ +/* $Id: string.c,v 1.65 1999/12/06 18:29:22 thies Exp $ */ /* Synced with php3 revision 1.193 1999-06-16 [ssb] */ @@ -211,22 +211,24 @@ PHPAPI void php_explode(pval *delim, pval *str, pval *return_value) { - char *work_str, *p1, *p2; + char *p1, *p2, *endp; int i = 0; - work_str = p1 = estrndup(str->value.str.val,str->value.str.len); - p2 = strstr(p1, delim->value.str.val); + endp = str->value.str.val + str->value.str.len; + + p1 = str->value.str.val; + p2 = php_memnstr(str->value.str.val, delim->value.str.val, delim->value.str.len, endp); + if (p2 == NULL) { - add_index_string(return_value, i++, p1, 1); + add_index_stringl(return_value, i++, p1, str->value.str.len, 1); } else do { - p2[0] = 0; - add_index_string(return_value, i++, p1, 1); + add_index_stringl(return_value, i++, p1, p2-p1, 1); p1 = p2 + delim->value.str.len; - } while ((p2 = strstr(p1, delim->value.str.val)) && p2 != work_str); - if (p1 != work_str) { - add_index_string(return_value, i++, p1, 1); + } while (p2 = php_memnstr(p1, delim->value.str.val, delim->value.str.len, endp)); + + if (p1 <= endp) { + add_index_stringl(return_value, i++, p1, endp-p1, 1); } - efree(work_str); } /* {{{ proto array explode(string separator, string str) @@ -238,17 +240,19 @@ if (ARG_COUNT(ht) != 2 || getParametersEx(2, &delim, &str) == FAILURE) { WRONG_PARAM_COUNT; } + convert_to_string_ex(str); convert_to_string_ex(delim); - if (strlen((*delim)->value.str.val)==0) { - /* the delimiter must be a valid C string that's at least 1 character long */ + if (! (*delim)->value.str.len) { php_error(E_WARNING,"Empty delimiter"); RETURN_FALSE; } + if (array_init(return_value) == FAILURE) { - return; + RETURN_FALSE; } + php_explode(*delim, *str, return_value); } /* }}} */

« previous php.version4 (#7543) next »