summaryrefslogtreecommitdiff
path: root/ext/standard/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/string.c')
-rw-r--r--ext/standard/string.c960
1 files changed, 469 insertions, 491 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 4ead166495..706a3eb075 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
@@ -56,7 +56,7 @@
#include "zend_execute.h"
#include "php_globals.h"
#include "basic_functions.h"
-#include "php_smart_str.h"
+#include "zend_smart_str.h"
#include <Zend/zend_exceptions.h>
#ifdef ZTS
#include "TSRM.h"
@@ -81,13 +81,13 @@
*/
void register_string_constants(INIT_FUNC_ARGS)
{
- REGISTER_INT_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_CS | CONST_PERSISTENT);
#ifdef HAVE_LOCALECONV
/* If last members of struct lconv equal CHAR_MAX, no grouping is done */
@@ -97,25 +97,25 @@ void register_string_constants(INIT_FUNC_ARGS)
# define CHAR_MAX 127
# endif
- REGISTER_INT_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef HAVE_LOCALE_H
- REGISTER_INT_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("LC_TIME", LC_TIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_INT_CONSTANT("LC_ALL", LC_ALL, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_CS | CONST_PERSISTENT);
# ifdef LC_MESSAGES
- REGISTER_INT_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_CS | CONST_PERSISTENT);
# endif
#endif
}
/* }}} */
-int php_tag_find(char *tag, php_size_t len, char *set);
+int php_tag_find(char *tag, size_t len, char *set);
/* this is read-only, so it's ok */
static char hexconvtab[] = "0123456789abcdef";
@@ -132,7 +132,7 @@ static zend_string *php_bin2hex(const unsigned char *old, const size_t oldlen)
zend_string *result;
size_t i, j;
- result = STR_SAFE_ALLOC(oldlen, 2 * sizeof(char), 0, 0);
+ result = zend_string_safe_alloc(oldlen, 2 * sizeof(char), 0, 0);
for (i = j = 0; i < oldlen; i++) {
result->val[j++] = hexconvtab[old[i] >> 4];
@@ -149,7 +149,7 @@ static zend_string *php_bin2hex(const unsigned char *old, const size_t oldlen)
static zend_string *php_hex2bin(const unsigned char *old, const size_t oldlen)
{
size_t target_length = oldlen >> 1;
- zend_string *str = STR_ALLOC(target_length, 0);
+ zend_string *str = zend_string_alloc(target_length, 0);
unsigned char *ret = (unsigned char *)str->val;
size_t i, j;
@@ -164,7 +164,7 @@ static zend_string *php_hex2bin(const unsigned char *old, const size_t oldlen)
} else if (c >= 'A' && c <= 'F') {
d = (c - 'A' + 10) << 4;
} else {
- STR_FREE(str);
+ zend_string_free(str);
return NULL;
}
c = old[j++];
@@ -175,7 +175,7 @@ static zend_string *php_hex2bin(const unsigned char *old, const size_t oldlen)
} else if (c >= 'A' && c <= 'F') {
d |= c - 'A' + 10;
} else {
- STR_FREE(str);
+ zend_string_free(str);
return NULL;
}
ret[i] = d;
@@ -282,9 +282,9 @@ PHP_FUNCTION(hex2bin)
static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) /* {{{ */
{
zend_string *s11, *s22;
- php_int_t start = 0, len = 0;
+ zend_long start = 0, len = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SS|ii", &s11,
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SS|ll", &s11,
&s22, &start, &len) == FAILURE) {
return;
}
@@ -296,11 +296,11 @@ static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) /
/* look at substr() function for more information */
if (start < 0) {
- start += (php_int_t)s11->len;
+ start += (zend_long)s11->len;
if (start < 0) {
start = 0;
}
- } else if ((php_size_t)start > s11->len) {
+ } else if ((size_t)start > s11->len) {
RETURN_FALSE;
}
@@ -311,21 +311,21 @@ static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) /
}
}
- if (len > (php_int_t)s11->len - start) {
+ if (len > (zend_long)s11->len - start) {
len = s11->len - start;
}
if(len == 0) {
- RETURN_INT(0);
+ RETURN_LONG(0);
}
if (behavior == STR_STRSPN) {
- RETURN_INT(php_strspn(s11->val + start /*str1_start*/,
+ RETURN_LONG(php_strspn(s11->val + start /*str1_start*/,
s22->val /*str2_start*/,
s11->val + start + len /*str1_end*/,
s22->val + s22->len /*str2_end*/));
} else if (behavior == STR_STRCSPN) {
- RETURN_INT(php_strcspn(s11->val + start /*str1_start*/,
+ RETURN_LONG(php_strcspn(s11->val + start /*str1_start*/,
s22->val /*str2_start*/,
s11->val + start + len /*str1_end*/,
s22->val + s22->len /*str2_end*/));
@@ -354,7 +354,7 @@ PHP_FUNCTION(strcspn)
#if HAVE_NL_LANGINFO
PHP_MINIT_FUNCTION(nl_langinfo)
{
-#define REGISTER_NL_LANGINFO_CONSTANT(x) REGISTER_INT_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
+#define REGISTER_NL_LANGINFO_CONSTANT(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
#ifdef ABDAY_1
REGISTER_NL_LANGINFO_CONSTANT(ABDAY_1);
REGISTER_NL_LANGINFO_CONSTANT(ABDAY_2);
@@ -524,10 +524,10 @@ PHP_MINIT_FUNCTION(nl_langinfo)
Query language and locale information */
PHP_FUNCTION(nl_langinfo)
{
- php_int_t item;
+ zend_long item;
char *value;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i", &item) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &item) == FAILURE) {
return;
}
@@ -692,7 +692,7 @@ PHP_FUNCTION(nl_langinfo)
#endif
break;
default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Item '" ZEND_INT_FMT "' is not valid", item);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Item '" ZEND_LONG_FMT "' is not valid", item);
RETURN_FALSE;
}
/* }}} */
@@ -718,7 +718,7 @@ PHP_FUNCTION(strcoll)
return;
}
- RETURN_INT(strcoll((const char *) s1->val,
+ RETURN_LONG(strcoll((const char *) s1->val,
(const char *) s2->val));
}
/* }}} */
@@ -729,7 +729,7 @@ PHP_FUNCTION(strcoll)
* it needs to be incrementing.
* Returns: FAILURE/SUCCESS whether the input was correct (i.e. no range errors)
*/
-static inline int php_charmask(unsigned char *input, php_size_t len, char *mask TSRMLS_DC)
+static inline int php_charmask(unsigned char *input, size_t len, char *mask TSRMLS_DC)
{
unsigned char *end;
unsigned char c;
@@ -778,10 +778,10 @@ static inline int php_charmask(unsigned char *input, php_size_t len, char *mask
* mode 3 : trim left and right
* what indicates which chars are to be trimmed. NULL->default (' \t\n\r\v\0')
*/
-PHPAPI char *php_trim(char *c, php_size_t len, char *what, php_size_t what_len, zval *return_value, int mode TSRMLS_DC)
+PHPAPI char *php_trim(char *c, size_t len, char *what, size_t what_len, zval *return_value, int mode TSRMLS_DC)
{
- register php_int_t i;
- int trimmed = 0;
+ register size_t i;
+ size_t trimmed = 0;
char mask[256];
if (what) {
@@ -802,12 +802,15 @@ PHPAPI char *php_trim(char *c, php_size_t len, char *what, php_size_t what_len,
c += trimmed;
}
if (mode & 2) {
- for (i = len - 1; i >= 0; i--) {
- if (mask[(unsigned char)c[i]]) {
- len--;
- } else {
- break;
- }
+ if (len > 0) {
+ i = len - 1;
+ do {
+ if (mask[(unsigned char)c[i]]) {
+ len--;
+ } else {
+ break;
+ }
+ } while (i-- != 0);
}
}
@@ -872,33 +875,24 @@ PHP_FUNCTION(ltrim)
Wraps buffer to selected number of characters using string break char */
PHP_FUNCTION(wordwrap)
{
- zend_string *text, *breakchar = NULL, *breakchar_save = NULL;
- php_size_t newtextlen, chk;
+ zend_string *text;
+ char *breakchar = "\n";
+ size_t newtextlen, chk, breakchar_len = 1;
size_t alloced;
- php_int_t current = 0, laststart = 0, lastspace = 0;
- php_int_t linelength = 75;
+ zend_long current = 0, laststart = 0, lastspace = 0;
+ zend_long linelength = 75;
zend_bool docut = 0;
zend_string *newtext;
- breakchar = breakchar_save = STR_INIT("\n", 1, 1);
- if (!breakchar) {
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|iSb", &text, &linelength, &breakchar, &docut) == FAILURE) {
- STR_FREE(breakchar);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|lsb", &text, &linelength, &breakchar, &breakchar_len, &docut) == FAILURE) {
return;
}
- if (breakchar != breakchar_save) {
- STR_FREE(breakchar_save);
- }
-
if (text->len == 0) {
RETURN_EMPTY_STRING();
}
- if (breakchar->len == 0) {
+ if (breakchar_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Break string cannot be empty");
RETURN_FALSE;
}
@@ -910,21 +904,21 @@ PHP_FUNCTION(wordwrap)
/* Special case for a single-character break as it needs no
additional storage space */
- if (breakchar->len == 1 && !docut) {
- newtext = STR_INIT(text->val, text->len, 0);
+ if (breakchar_len == 1 && !docut) {
+ newtext = zend_string_init(text->val, text->len, 0);
laststart = lastspace = 0;
for (current = 0; current < text->len; current++) {
- if (text->val[current] == breakchar->val[0]) {
+ if (text->val[current] == breakchar[0]) {
laststart = lastspace = current + 1;
} else if (text->val[current] == ' ') {
if (current - laststart >= linelength) {
- newtext->val[current] = breakchar->val[0];
+ newtext->val[current] = breakchar[0];
laststart = current + 1;
}
lastspace = current;
} else if (current - laststart >= linelength && laststart != lastspace) {
- newtext->val[lastspace] = breakchar->val[0];
+ newtext->val[lastspace] = breakchar[0];
laststart = lastspace + 1;
}
}
@@ -933,13 +927,13 @@ PHP_FUNCTION(wordwrap)
} else {
/* Multiple character line break or forced cut */
if (linelength > 0) {
- chk = (php_size_t)(text->len/linelength + 1);
- newtext = STR_ALLOC(chk * breakchar->len + text->len, 0);
- alloced = text->len + chk * breakchar->len + 1;
+ chk = (size_t)(text->len/linelength + 1);
+ newtext = zend_string_alloc(chk * breakchar_len + text->len, 0);
+ alloced = text->len + chk * breakchar_len + 1;
} else {
chk = text->len;
- alloced = text->len * (breakchar->len + 1) + 1;
- newtext = STR_ALLOC(text->len * (breakchar->len + 1), 0);
+ alloced = text->len * (breakchar_len + 1) + 1;
+ newtext = zend_string_alloc(text->len * (breakchar_len + 1), 0);
}
/* now keep track of the actual new text length */
@@ -948,18 +942,18 @@ PHP_FUNCTION(wordwrap)
laststart = lastspace = 0;
for (current = 0; current < text->len; current++) {
if (chk <= 0) {
- alloced += (php_size_t) (((text->len - current + 1)/linelength + 1) * breakchar->len) + 1;
- newtext = STR_REALLOC(newtext, alloced, 0);
- chk = (php_size_t) ((text->len - current)/linelength) + 1;
+ alloced += (size_t) (((text->len - current + 1)/linelength + 1) * breakchar_len) + 1;
+ newtext = zend_string_realloc(newtext, alloced, 0);
+ chk = (size_t) ((text->len - current)/linelength) + 1;
}
/* when we hit an existing break, copy to new buffer, and
* fix up laststart and lastspace */
- if (text->val[current] == breakchar->val[0]
- && current + breakchar->len < text->len
- && !strncmp(text->val+current, breakchar->val, breakchar->len)) {
- memcpy(newtext->val + newtextlen, text->val + laststart, current - laststart + breakchar->len);
- newtextlen += current - laststart + breakchar->len;
- current += breakchar->len - 1;
+ if (text->val[current] == breakchar[0]
+ && current + breakchar_len < text->len
+ && !strncmp(text->val+current, breakchar, breakchar_len)) {
+ memcpy(newtext->val + newtextlen, text->val + laststart, current - laststart + breakchar_len);
+ newtextlen += current - laststart + breakchar_len;
+ current += breakchar_len - 1;
laststart = lastspace = current + 1;
chk--;
}
@@ -969,8 +963,8 @@ PHP_FUNCTION(wordwrap)
if (current - laststart >= linelength) {
memcpy(newtext->val + newtextlen, text->val + laststart, current - laststart);
newtextlen += current - laststart;
- memcpy(newtext->val + newtextlen, breakchar->val, breakchar->len);
- newtextlen += breakchar->len;
+ memcpy(newtext->val + newtextlen, breakchar, breakchar_len);
+ newtextlen += breakchar_len;
laststart = current + 1;
chk--;
}
@@ -983,8 +977,8 @@ PHP_FUNCTION(wordwrap)
&& docut && laststart >= lastspace) {
memcpy(newtext->val + newtextlen, text->val + laststart, current - laststart);
newtextlen += current - laststart;
- memcpy(newtext->val + newtextlen, breakchar->val, breakchar->len);
- newtextlen += breakchar->len;
+ memcpy(newtext->val + newtextlen, breakchar, breakchar_len);
+ newtextlen += breakchar_len;
laststart = lastspace = current;
chk--;
}
@@ -995,8 +989,8 @@ PHP_FUNCTION(wordwrap)
&& laststart < lastspace) {
memcpy(newtext->val + newtextlen, text->val + laststart, lastspace - laststart);
newtextlen += lastspace - laststart;
- memcpy(newtext->val + newtextlen, breakchar->val, breakchar->len);
- newtextlen += breakchar->len;
+ memcpy(newtext->val + newtextlen, breakchar, breakchar_len);
+ newtextlen += breakchar_len;
laststart = lastspace = lastspace + 1;
chk--;
}
@@ -1010,7 +1004,7 @@ PHP_FUNCTION(wordwrap)
newtext->val[newtextlen] = '\0';
/* free unused memory */
- newtext = STR_REALLOC(newtext, newtextlen, 0);
+ newtext = zend_string_realloc(newtext, newtextlen, 0);
RETURN_NEW_STR(newtext);
}
@@ -1019,41 +1013,36 @@ PHP_FUNCTION(wordwrap)
/* {{{ php_explode
*/
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, php_int_t limit)
+PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit)
{
- char *p1, *p2, *endp;
-
- endp = Z_STRVAL_P(str) + Z_STRSIZE_P(str);
-
- p1 = Z_STRVAL_P(str);
- p2 = (char*)php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRSIZE_P(delim), endp);
+ char *p1 = str->val;
+ char *endp = str->val + str->len;
+ char *p2 = (char *) php_memnstr(str->val, delim->val, delim->len, endp);
if (p2 == NULL) {
- add_next_index_stringl(return_value, p1, Z_STRSIZE_P(str));
+ add_next_index_str(return_value, zend_string_copy(str));
} else {
do {
add_next_index_stringl(return_value, p1, p2 - p1);
- p1 = p2 + Z_STRSIZE_P(delim);
- } while ((p2 = (char*)php_memnstr(p1, Z_STRVAL_P(delim), Z_STRSIZE_P(delim), endp)) != NULL &&
- --limit > 1);
+ p1 = p2 + delim->len;
+ p2 = (char *) php_memnstr(p1, delim->val, delim->len, endp);
+ } while (p2 != NULL && --limit > 1);
- if (p1 <= endp)
- add_next_index_stringl(return_value, p1, endp-p1);
+ if (p1 <= endp) {
+ add_next_index_stringl(return_value, p1, endp - p1);
+ }
}
}
/* }}} */
/* {{{ php_explode_negative_limit
*/
-PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_value, php_int_t limit)
+PHPAPI void php_explode_negative_limit(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit)
{
#define EXPLODE_ALLOC_STEP 64
- char *p1, *p2, *endp;
-
- endp = Z_STRVAL_P(str) + Z_STRSIZE_P(str);
-
- p1 = Z_STRVAL_P(str);
- p2 = (char*)php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRSIZE_P(delim), endp);
+ char *p1 = str->val;
+ char *endp = str->val + str->len;
+ char *p2 = (char *) php_memnstr(str->val, delim->val, delim->len, endp);
if (p2 == NULL) {
/*
@@ -1061,8 +1050,8 @@ PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_valu
by doing nothing we return empty array
*/
} else {
- php_size_t allocated = EXPLODE_ALLOC_STEP, found = 0;
- php_int_t i, to_return;
+ size_t allocated = EXPLODE_ALLOC_STEP, found = 0;
+ zend_long i, to_return;
char **positions = emalloc(allocated * sizeof(char *));
positions[found++] = p1;
@@ -1071,14 +1060,15 @@ PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_valu
allocated = found + EXPLODE_ALLOC_STEP;/* make sure we have enough memory */
positions = erealloc(positions, allocated*sizeof(char *));
}
- positions[found++] = p1 = p2 + Z_STRSIZE_P(delim);
- } while ((p2 = (char*)php_memnstr(p1, Z_STRVAL_P(delim), Z_STRSIZE_P(delim), endp)) != NULL);
+ positions[found++] = p1 = p2 + delim->len;
+ p2 = (char *) php_memnstr(p1, delim->val, delim->len, endp);
+ } while (p2 != NULL);
to_return = limit + found;
/* limit is at least -1 therefore no need of bounds checking : i will be always less than found */
- for (i = 0;i < to_return;i++) { /* this checks also for to_return > 0 */
+ for (i = 0; i < to_return; i++) { /* this checks also for to_return > 0 */
add_next_index_stringl(return_value, positions[i],
- (positions[i+1] - Z_STRSIZE_P(delim)) - positions[i]);
+ (positions[i+1] - delim->len) - positions[i]);
}
efree(positions);
}
@@ -1091,11 +1081,10 @@ PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_valu
PHP_FUNCTION(explode)
{
zend_string *str, *delim;
- php_int_t limit = PHP_INT_MAX; /* No limit */
- zval zdelim, zstr;
+ zend_long limit = ZEND_LONG_MAX; /* No limit */
#ifndef FAST_ZPP
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SS|i", &delim, &str, &limit) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SS|l", &delim, &str, &limit) == FAILURE) {
return;
}
#else
@@ -1103,7 +1092,7 @@ PHP_FUNCTION(explode)
Z_PARAM_STR(delim)
Z_PARAM_STR(str)
Z_PARAM_OPTIONAL
- Z_PARAM_INT(limit)
+ Z_PARAM_LONG(limit)
ZEND_PARSE_PARAMETERS_END();
#endif
@@ -1116,17 +1105,15 @@ PHP_FUNCTION(explode)
if (str->len == 0) {
if (limit >= 0) {
- add_next_index_stringl(return_value, "", sizeof("") - 1);
+ add_next_index_str(return_value, STR_EMPTY_ALLOC());
}
return;
}
- ZVAL_STR(&zstr, str);
- ZVAL_STR(&zdelim, delim);
if (limit > 1) {
- php_explode(&zdelim, &zstr, return_value, limit);
+ php_explode(delim, str, return_value, limit);
} else if (limit < 0) {
- php_explode_negative_limit(&zdelim, &zstr, return_value, limit);
+ php_explode_negative_limit(delim, str, return_value, limit);
} else {
add_index_stringl(return_value, 0, str->val, str->len);
}
@@ -1139,7 +1126,7 @@ PHP_FUNCTION(explode)
/* {{{ php_implode
*/
-PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value TSRMLS_DC)
+PHPAPI void php_implode(const zend_string *delim, zval *arr, zval *return_value TSRMLS_DC)
{
zval *tmp;
smart_str implstr = {0};
@@ -1156,11 +1143,11 @@ PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value TSRMLS_DC)
again:
switch (Z_TYPE_P(tmp)) {
case IS_STRING:
- smart_str_appendl(&implstr, Z_STRVAL_P(tmp), Z_STRSIZE_P(tmp));
+ smart_str_append(&implstr, Z_STR_P(tmp));
break;
- case IS_INT:
- smart_str_append_int(&implstr, Z_IVAL_P(tmp));
+ case IS_LONG:
+ smart_str_append_long(&implstr, Z_LVAL_P(tmp));
break;
case IS_TRUE:
@@ -1173,11 +1160,11 @@ again:
case IS_DOUBLE: {
char *stmp;
- php_size_t str_len = spprintf(&stmp, 0, "%.*G", (int) EG(precision), Z_DVAL_P(tmp));
+ size_t str_len = spprintf(&stmp, 0, "%.*G", (int) EG(precision), Z_DVAL_P(tmp));
smart_str_appendl(&implstr, stmp, str_len);
efree(stmp);
- }
break;
+ }
case IS_REFERENCE:
tmp = Z_REFVAL_P(tmp);
@@ -1185,14 +1172,14 @@ again:
default:
str = zval_get_string(tmp);
- smart_str_appendl(&implstr, str->val, str->len);
- STR_RELEASE(str);
+ smart_str_append(&implstr, str);
+ zend_string_release(str);
break;
}
if (++i != numelems) {
- smart_str_appendl(&implstr, Z_STRVAL_P(delim), Z_STRSIZE_P(delim));
+ smart_str_append(&implstr, delim);
}
} ZEND_HASH_FOREACH_END();
@@ -1211,7 +1198,8 @@ again:
Joins array elements placing glue string between items and return one string */
PHP_FUNCTION(implode)
{
- zval *arg1 = NULL, *arg2 = NULL, *delim, *arr, tmp;
+ zval *arg1, *arg2 = NULL, *arr;
+ zend_string *delim;
#ifndef FAST_ZPP
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|z", &arg1, &arg2) == FAILURE) {
@@ -1231,20 +1219,15 @@ PHP_FUNCTION(implode)
return;
}
- ZVAL_EMPTY_STRING(&tmp);
- delim = &tmp;
-
- SEPARATE_ZVAL(arg1);
+ delim = STR_EMPTY_ALLOC();
arr = arg1;
} else {
if (Z_TYPE_P(arg1) == IS_ARRAY) {
+ delim = zval_get_string(arg2);
arr = arg1;
- convert_to_string_ex(arg2);
- delim = arg2;
} else if (Z_TYPE_P(arg2) == IS_ARRAY) {
+ delim = zval_get_string(arg1);
arr = arg2;
- convert_to_string_ex(arg1);
- delim = arg1;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments passed");
return;
@@ -1252,6 +1235,7 @@ PHP_FUNCTION(implode)
}
php_implode(delim, arr, return_value TSRMLS_CC);
+ zend_string_release(delim);
}
/* }}} */
@@ -1266,7 +1250,7 @@ PHP_FUNCTION(strtok)
char *token_end;
char *p;
char *pe;
- int skipped = 0;
+ size_t skipped = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|S", &str, &tok) == FAILURE) {
return;
@@ -1360,7 +1344,7 @@ PHP_FUNCTION(strtoupper)
return;
}
- result = STR_INIT(arg->val, arg->len, 0);
+ result = zend_string_init(arg->val, arg->len, 0);
php_strtoupper(result->val, result->len);
RETURN_NEW_STR(result);
}
@@ -1400,7 +1384,7 @@ PHP_FUNCTION(strtolower)
ZEND_PARSE_PARAMETERS_END();
#endif
- result = STR_INIT(str->val, str->len, 0);
+ result = zend_string_init(str->val, str->len, 0);
php_strtolower(result->val, result->len);
RETURN_NEW_STR(result);
}
@@ -1419,13 +1403,13 @@ PHPAPI zend_string *php_basename(const char *s, size_t len, char *suffix, size_t
cnt = len;
state = 0;
while (cnt > 0) {
- inc_len = (*c == '\0' ? 1: php_mblen(c, cnt));
+ inc_len = (*c == '\0' ? 1 : php_mblen(c, cnt));
switch (inc_len) {
case -2:
case -1:
inc_len = 1;
- php_ignore_value(php_mblen(NULL, 0));
+ php_mb_reset();
break;
case 0:
goto quit_loop;
@@ -1474,14 +1458,14 @@ quit_loop:
if (state == 1) {
cend = c;
}
- if (suffix != NULL && sufflen < (uint)(cend - comp) &&
+ if (suffix != NULL && sufflen < (size_t)(cend - comp) &&
memcmp(cend - sufflen, suffix, sufflen) == 0) {
cend -= sufflen;
}
len = cend - comp;
- ret = STR_INIT(comp, len, 0);
+ ret = zend_string_init(comp, len, 0);
return ret;
}
/* }}} */
@@ -1491,7 +1475,7 @@ quit_loop:
PHP_FUNCTION(basename)
{
char *string, *suffix = NULL;
- int string_len, suffix_len = 0;
+ size_t string_len, suffix_len = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &string, &string_len, &suffix, &suffix_len) == FAILURE) {
return;
@@ -1515,13 +1499,13 @@ PHP_FUNCTION(dirname)
{
char *str;
zend_string *ret;
- int str_len;
+ size_t str_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
return;
}
- ret = STR_INIT(str, str_len, 0);
+ ret = zend_string_init(str, str_len, 0);
ret->len = zend_dirname(ret->val, str_len);
RETURN_NEW_STR(ret);
@@ -1534,11 +1518,12 @@ PHP_FUNCTION(pathinfo)
{
zval tmp;
char *path, *dirname;
- int path_len, have_basename;
- php_int_t opt = PHP_PATHINFO_ALL;
+ size_t path_len;
+ int have_basename;
+ zend_long opt = PHP_PATHINFO_ALL;
zend_string *ret = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &path, &path_len, &opt) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &path, &path_len, &opt) == FAILURE) {
return;
}
@@ -1557,12 +1542,12 @@ PHP_FUNCTION(pathinfo)
if (have_basename) {
ret = php_basename(path, path_len, NULL, 0 TSRMLS_CC);
- add_assoc_str(&tmp, "basename", STR_COPY(ret));
+ add_assoc_str(&tmp, "basename", zend_string_copy(ret));
}
if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
const char *p;
- int idx;
+ ptrdiff_t idx;
if (!have_basename) {
ret = php_basename(path, path_len, NULL, 0 TSRMLS_CC);
@@ -1578,7 +1563,7 @@ PHP_FUNCTION(pathinfo)
if ((opt & PHP_PATHINFO_FILENAME) == PHP_PATHINFO_FILENAME) {
const char *p;
- int idx;
+ ptrdiff_t idx;
/* Have we already looked up the basename? */
if (!have_basename && !ret) {
@@ -1592,7 +1577,7 @@ PHP_FUNCTION(pathinfo)
}
if (ret) {
- STR_RELEASE(ret);
+ zend_string_release(ret);
}
if (opt == PHP_PATHINFO_ALL) {
@@ -1663,8 +1648,8 @@ PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end)
static int php_needle_char(zval *needle, char *target TSRMLS_DC)
{
switch (Z_TYPE_P(needle)) {
- case IS_INT:
- *target = (char)Z_IVAL_P(needle);
+ case IS_LONG:
+ *target = (char)Z_LVAL_P(needle);
return SUCCESS;
case IS_NULL:
case IS_FALSE:
@@ -1680,11 +1665,11 @@ static int php_needle_char(zval *needle, char *target TSRMLS_DC)
{
zval holder = *needle;
zval_copy_ctor(&(holder));
- convert_to_int(&(holder));
- if(Z_TYPE(holder) != IS_INT) {
+ convert_to_long(&(holder));
+ if(Z_TYPE(holder) != IS_LONG) {
return FAILURE;
}
- *target = (char)Z_IVAL(holder);
+ *target = (char)Z_LVAL(holder);
return SUCCESS;
}
default: {
@@ -1702,7 +1687,7 @@ PHP_FUNCTION(stristr)
zval *needle;
zend_string *haystack;
char *found = NULL;
- php_size_t found_offset;
+ size_t found_offset;
char *haystack_dup;
char needle_char[2];
zend_bool part = 0;
@@ -1715,13 +1700,13 @@ PHP_FUNCTION(stristr)
if (Z_TYPE_P(needle) == IS_STRING) {
char *orig_needle;
- if (!Z_STRSIZE_P(needle)) {
+ if (!Z_STRLEN_P(needle)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
efree(haystack_dup);
RETURN_FALSE;
}
- orig_needle = estrndup(Z_STRVAL_P(needle), Z_STRSIZE_P(needle));
- found = php_stristr(haystack_dup, orig_needle, haystack->len, Z_STRSIZE_P(needle));
+ orig_needle = estrndup(Z_STRVAL_P(needle), Z_STRLEN_P(needle));
+ found = php_stristr(haystack_dup, orig_needle, haystack->len, Z_STRLEN_P(needle));
efree(orig_needle);
} else {
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
@@ -1756,7 +1741,7 @@ PHP_FUNCTION(strstr)
zend_string *haystack;
char *found = NULL;
char needle_char[2];
- php_int_t found_offset;
+ zend_long found_offset;
zend_bool part = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|b", &haystack, &needle, &part) == FAILURE) {
@@ -1764,12 +1749,12 @@ PHP_FUNCTION(strstr)
}
if (Z_TYPE_P(needle) == IS_STRING) {
- if (!Z_STRSIZE_P(needle)) {
+ if (!Z_STRLEN_P(needle)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
RETURN_FALSE;
}
- found = (char*)php_memnstr(haystack->val, Z_STRVAL_P(needle), Z_STRSIZE_P(needle), haystack->val + haystack->len);
+ found = (char*)php_memnstr(haystack->val, Z_STRVAL_P(needle), Z_STRLEN_P(needle), haystack->val + haystack->len);
} else {
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
RETURN_FALSE;
@@ -1803,10 +1788,10 @@ PHP_FUNCTION(strpos)
zend_string *haystack;
char *found = NULL;
char needle_char[2];
- php_int_t offset = 0;
+ zend_long offset = 0;
#ifndef FAST_ZPP
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|i", &haystack, &needle, &offset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|l", &haystack, &needle, &offset) == FAILURE) {
return;
}
#else
@@ -1814,24 +1799,24 @@ PHP_FUNCTION(strpos)
Z_PARAM_STR(haystack)
Z_PARAM_ZVAL(needle)
Z_PARAM_OPTIONAL
- Z_PARAM_INT(offset)
+ Z_PARAM_LONG(offset)
ZEND_PARSE_PARAMETERS_END();
#endif
- if (offset < 0 || offset > haystack->len) {
+ if (offset < 0 || (size_t)offset > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string");
RETURN_FALSE;
}
if (Z_TYPE_P(needle) == IS_STRING) {
- if (!Z_STRSIZE_P(needle)) {
+ if (!Z_STRLEN_P(needle)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
RETURN_FALSE;
}
found = (char*)php_memnstr(haystack->val + offset,
Z_STRVAL_P(needle),
- Z_STRSIZE_P(needle),
+ Z_STRLEN_P(needle),
haystack->val + haystack->len);
} else {
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
@@ -1846,7 +1831,7 @@ PHP_FUNCTION(strpos)
}
if (found) {
- RETURN_INT(found - haystack->val);
+ RETURN_LONG(found - haystack->val);
} else {
RETURN_FALSE;
}
@@ -1859,16 +1844,16 @@ PHP_FUNCTION(stripos)
{
char *found = NULL;
zend_string *haystack;
- php_int_t offset = 0;
+ zend_long offset = 0;
char *needle_dup = NULL, *haystack_dup;
char needle_char[2];
zval *needle;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|i", &haystack, &needle, &offset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|l", &haystack, &needle, &offset) == FAILURE) {
return;
}
- if (offset < 0 || offset > haystack->len) {
+ if (offset < 0 || (size_t)offset > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string");
RETURN_FALSE;
}
@@ -1881,14 +1866,14 @@ PHP_FUNCTION(stripos)
php_strtolower(haystack_dup, haystack->len);
if (Z_TYPE_P(needle) == IS_STRING) {
- if (Z_STRSIZE_P(needle) == 0 || Z_STRSIZE_P(needle) > haystack->len) {
+ if (Z_STRLEN_P(needle) == 0 || Z_STRLEN_P(needle) > haystack->len) {
efree(haystack_dup);
RETURN_FALSE;
}
- needle_dup = estrndup(Z_STRVAL_P(needle), Z_STRSIZE_P(needle));
- php_strtolower(needle_dup, Z_STRSIZE_P(needle));
- found = (char*)php_memnstr(haystack_dup + offset, needle_dup, Z_STRSIZE_P(needle), haystack_dup + haystack->len);
+ needle_dup = estrndup(Z_STRVAL_P(needle), Z_STRLEN_P(needle));
+ php_strtolower(needle_dup, Z_STRLEN_P(needle));
+ found = (char*)php_memnstr(haystack_dup + offset, needle_dup, Z_STRLEN_P(needle), haystack_dup + haystack->len);
} else {
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
efree(haystack_dup);
@@ -1908,7 +1893,7 @@ PHP_FUNCTION(stripos)
}
if (found) {
- RETURN_INT(found - haystack_dup);
+ RETURN_LONG(found - haystack_dup);
} else {
RETURN_FALSE;
}
@@ -1922,12 +1907,12 @@ PHP_FUNCTION(strrpos)
zval *zneedle;
char *needle;
zend_string *haystack;
- php_size_t needle_len;
- php_int_t offset = 0;
+ size_t needle_len;
+ zend_long offset = 0;
char *p, *e, ord_needle[2];
#ifndef FAST_ZPP
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|i", &haystack, &zneedle, &offset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|l", &haystack, &zneedle, &offset) == FAILURE) {
RETURN_FALSE;
}
#else
@@ -1935,13 +1920,13 @@ PHP_FUNCTION(strrpos)
Z_PARAM_STR(haystack)
Z_PARAM_ZVAL(zneedle)
Z_PARAM_OPTIONAL
- Z_PARAM_INT(offset)
+ Z_PARAM_LONG(offset)
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
#endif
if (Z_TYPE_P(zneedle) == IS_STRING) {
needle = Z_STRVAL_P(zneedle);
- needle_len = Z_STRSIZE_P(zneedle);
+ needle_len = Z_STRLEN_P(zneedle);
} else {
if (php_needle_char(zneedle, ord_needle TSRMLS_CC) != SUCCESS) {
RETURN_FALSE;
@@ -1956,20 +1941,20 @@ PHP_FUNCTION(strrpos)
}
if (offset >= 0) {
- if (offset > haystack->len) {
+ if ((size_t)offset > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
- p = haystack->val + offset;
+ p = haystack->val + (size_t)offset;
e = haystack->val + haystack->len - needle_len;
} else {
- if (offset < -INT_MAX || -offset > haystack->len) {
+ if (offset < -INT_MAX || (size_t)(-offset) > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack->val;
- if (needle_len > -offset) {
+ if (needle_len > (size_t)(-offset)) {
e = haystack->val + haystack->len - needle_len;
} else {
e = haystack->val + haystack->len + offset;
@@ -1980,7 +1965,7 @@ PHP_FUNCTION(strrpos)
/* Single character search can shortcut memcmps */
while (e >= p) {
if (*e == *needle) {
- RETURN_INT(e - p + (offset > 0 ? offset : 0));
+ RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
@@ -1989,7 +1974,7 @@ PHP_FUNCTION(strrpos)
while (e >= p) {
if (memcmp(e, needle, needle_len) == 0) {
- RETURN_INT(e - p + (offset > 0 ? offset : 0));
+ RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
@@ -2005,18 +1990,18 @@ PHP_FUNCTION(strripos)
zval *zneedle;
char *needle;
zend_string *haystack;
- php_size_t needle_len;
- php_int_t offset = 0;
+ size_t needle_len;
+ zend_long offset = 0;
char *p, *e, ord_needle[2];
char *needle_dup, *haystack_dup;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|i", &haystack, &zneedle, &offset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz|l", &haystack, &zneedle, &offset) == FAILURE) {
RETURN_FALSE;
}
if (Z_TYPE_P(zneedle) == IS_STRING) {
needle = Z_STRVAL_P(zneedle);
- needle_len = Z_STRSIZE_P(zneedle);
+ needle_len = Z_STRLEN_P(zneedle);
} else {
if (php_needle_char(zneedle, ord_needle TSRMLS_CC) != SUCCESS) {
RETURN_FALSE;
@@ -2034,7 +2019,7 @@ PHP_FUNCTION(strripos)
/* Single character search can shortcut memcmps
Can also avoid tolower emallocs */
if (offset >= 0) {
- if (offset > haystack->len) {
+ if ((size_t)offset > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
@@ -2042,7 +2027,7 @@ PHP_FUNCTION(strripos)
e = haystack->val + haystack->len - 1;
} else {
p = haystack->val;
- if (offset < -INT_MAX || -offset > haystack->len) {
+ if (offset < -INT_MAX || (size_t)(-offset) > haystack->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
@@ -2052,7 +2037,7 @@ PHP_FUNCTION(strripos)
*ord_needle = tolower(*needle);
while (e >= p) {
if (tolower(*e) == *ord_needle) {
- RETURN_INT(e - p + (offset > 0 ? offset : 0));
+ RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
@@ -2065,7 +2050,7 @@ PHP_FUNCTION(strripos)
php_strtolower(haystack_dup, haystack->len);
if (offset >= 0) {
- if (offset > haystack->len) {
+ if ((size_t)offset > haystack->len) {
efree(needle_dup);
efree(haystack_dup);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
@@ -2074,14 +2059,14 @@ PHP_FUNCTION(strripos)
p = haystack_dup + offset;
e = haystack_dup + haystack->len - needle_len;
} else {
- if (offset < -INT_MAX || -offset > haystack->len) {
+ if (offset < -INT_MAX || (size_t)(-offset) > haystack->len) {
efree(needle_dup);
efree(haystack_dup);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack_dup;
- if (needle_len > -offset) {
+ if (needle_len > (size_t)(-offset)) {
e = haystack_dup + haystack->len - needle_len;
} else {
e = haystack_dup + haystack->len + offset;
@@ -2092,7 +2077,7 @@ PHP_FUNCTION(strripos)
if (memcmp(e, needle_dup, needle_len) == 0) {
efree(haystack_dup);
efree(needle_dup);
- RETURN_INT(e - p + (offset > 0 ? offset : 0));
+ RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
@@ -2110,7 +2095,7 @@ PHP_FUNCTION(strrchr)
zval *needle;
zend_string *haystack;
const char *found = NULL;
- php_int_t found_offset;
+ zend_long found_offset;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz", &haystack, &needle) == FAILURE) {
return;
@@ -2138,12 +2123,12 @@ PHP_FUNCTION(strrchr)
/* {{{ php_chunk_split
*/
-static zend_string *php_chunk_split(char *src, php_size_t srclen, char *end, php_size_t endlen, php_size_t chunklen)
+static zend_string *php_chunk_split(char *src, size_t srclen, char *end, size_t endlen, size_t chunklen)
{
char *p, *q;
- php_size_t chunks; /* complete chunks! */
- php_size_t restlen;
- php_size_t out_len;
+ size_t chunks; /* complete chunks! */
+ size_t restlen;
+ size_t out_len;
zend_string *dest;
chunks = srclen / chunklen;
@@ -2162,7 +2147,7 @@ static zend_string *php_chunk_split(char *src, php_size_t srclen, char *end, php
}
out_len += srclen + 1;
- dest = STR_ALLOC(out_len * sizeof(char), 0);
+ dest = zend_string_alloc(out_len * sizeof(char), 0);
for (p = src, q = dest->val; p < (src + srclen - chunklen + 1); ) {
memcpy(q, p, chunklen);
@@ -2192,11 +2177,11 @@ PHP_FUNCTION(chunk_split)
{
zend_string *str;
char *end = "\r\n";
- int endlen = 2;
- php_int_t chunklen = 76;
+ size_t endlen = 2;
+ zend_long chunklen = 76;
zend_string *result;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|is", &str, &chunklen, &end, &endlen) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|ls", &str, &chunklen, &end, &endlen) == FAILURE) {
return;
}
@@ -2205,9 +2190,9 @@ PHP_FUNCTION(chunk_split)
RETURN_FALSE;
}
- if (chunklen > str->len) {
+ if ((size_t)chunklen > str->len) {
/* to maintain BC, we must return original string + ending */
- result = STR_ALLOC(endlen + str->len, 0);
+ result = zend_string_alloc(endlen + str->len, 0);
memcpy(result->val, str->val, str->len);
memcpy(result->val + str->len, end, endlen);
result->val[result->len] = '\0';
@@ -2218,7 +2203,7 @@ PHP_FUNCTION(chunk_split)
RETURN_EMPTY_STRING();
}
- result = php_chunk_split(str->val, str->len, end, endlen, chunklen);
+ result = php_chunk_split(str->val, str->len, end, endlen, (size_t)chunklen);
if (result) {
RETURN_STR(result);
@@ -2233,39 +2218,39 @@ PHP_FUNCTION(chunk_split)
PHP_FUNCTION(substr)
{
zend_string *str;
- php_int_t l = 0, f;
+ zend_long l = 0, f;
int argc = ZEND_NUM_ARGS();
#ifndef FAST_ZPP
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Si|i", &str, &f, &l) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sl|l", &str, &f, &l) == FAILURE) {
return;
}
#else
ZEND_PARSE_PARAMETERS_START(2, 3)
Z_PARAM_STR(str)
- Z_PARAM_INT(f)
+ Z_PARAM_LONG(f)
Z_PARAM_OPTIONAL
- Z_PARAM_INT(l)
+ Z_PARAM_LONG(l)
ZEND_PARSE_PARAMETERS_END();
#endif
if (argc > 2) {
- if ((l < 0 && -l > str->len)) {
+ if ((l < 0 && (size_t)(-l) > str->len)) {
RETURN_FALSE;
- } else if (l > (php_int_t)str->len) {
+ } else if (l > (zend_long)str->len) {
l = str->len;
}
} else {
l = str->len;
}
- if (f > (php_int_t)str->len) {
+ if (f > (zend_long)str->len) {
RETURN_FALSE;
} else if (f < 0 && -f > str->len) {
f = 0;
}
- if (l < 0 && (l + (php_int_t)str->len - f) < 0) {
+ if (l < 0 && (l + (zend_long)str->len - f) < 0) {
RETURN_FALSE;
}
@@ -2273,7 +2258,7 @@ PHP_FUNCTION(substr)
* of the string
*/
if (f < 0) {
- f = (php_int_t)str->len + f;
+ f = (zend_long)str->len + f;
if (f < 0) {
f = 0;
}
@@ -2283,17 +2268,17 @@ PHP_FUNCTION(substr)
* needed to stop that many chars from the end of the string
*/
if (l < 0) {
- l = ((php_int_t)str->len - f) + l;
+ l = ((zend_long)str->len - f) + l;
if (l < 0) {
l = 0;
}
}
- if (f >= (php_int_t)str->len) {
+ if (f >= (zend_long)str->len) {
RETURN_FALSE;
}
- if ((f + l) > (php_int_t)str->len) {
+ if ((f + l) > (zend_long)str->len) {
l = str->len - f;
}
@@ -2309,8 +2294,8 @@ PHP_FUNCTION(substr_replace)
zval *from;
zval *len = NULL;
zval *repl;
- php_int_t l = 0; /* l and f should be size_t, however this needs much closer below logic investigation.*/
- php_int_t f;
+ zend_long l = 0; /* l and f should be size_t, however this needs much closer below logic investigation.*/
+ zend_long f;
int argc = ZEND_NUM_ARGS();
zend_string *result;
@@ -2328,16 +2313,16 @@ PHP_FUNCTION(substr_replace)
convert_to_string_ex(repl);
}
if (Z_TYPE_P(from) != IS_ARRAY) {
- convert_to_int_ex(from);
+ convert_to_long_ex(from);
}
if (argc > 3) {
if (Z_TYPE_P(len) != IS_ARRAY) {
- l = zval_get_int(len);
+ l = zval_get_long(len);
}
} else {
if (Z_TYPE_P(str) != IS_ARRAY) {
- l = Z_STRSIZE_P(str);
+ l = Z_STRLEN_P(str);
}
}
@@ -2347,79 +2332,79 @@ PHP_FUNCTION(substr_replace)
(argc == 4 && Z_TYPE_P(from) != Z_TYPE_P(len))
) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should be of same type - numerical or array ");
- RETURN_STR(STR_COPY(Z_STR_P(str)));
+ RETURN_STR(zend_string_copy(Z_STR_P(str)));
}
if (argc == 4 && Z_TYPE_P(from) == IS_ARRAY) {
if (zend_hash_num_elements(Z_ARRVAL_P(from)) != zend_hash_num_elements(Z_ARRVAL_P(len))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should have the same number of elements");
- RETURN_STR(STR_COPY(Z_STR_P(str)));
+ RETURN_STR(zend_string_copy(Z_STR_P(str)));
}
}
}
if (Z_TYPE_P(str) != IS_ARRAY) {
if (Z_TYPE_P(from) != IS_ARRAY) {
- php_size_t repl_len = 0;
+ size_t repl_len = 0;
- f = Z_IVAL_P(from);
+ f = Z_LVAL_P(from);
/* if "from" position is negative, count start position from the end
* of the string
*/
if (f < 0) {
- f = Z_STRSIZE_P(str) + f;
+ f = Z_STRLEN_P(str) + f;
if (f < 0) {
f = 0;
}
- } else if (f > Z_STRSIZE_P(str)) {
- f = Z_STRSIZE_P(str);
+ } else if (f > Z_STRLEN_P(str)) {
+ f = Z_STRLEN_P(str);
}
/* if "length" position is negative, set it to the length
* needed to stop that many chars from the end of the string
*/
if (l < 0) {
- l = (Z_STRSIZE_P(str) - f) + l;
+ l = (Z_STRLEN_P(str) - f) + l;
if (l < 0) {
l = 0;
}
}
- if (f > Z_STRSIZE_P(str) || (f < 0 && -f > Z_STRSIZE_P(str))) {
+ if (f > Z_STRLEN_P(str) || (f < 0 && -f > Z_STRLEN_P(str))) {
RETURN_FALSE;
- } else if (l > Z_STRSIZE_P(str) || (l < 0 && -l > Z_STRSIZE_P(str))) {
- l = Z_STRSIZE_P(str);
+ } else if (l > Z_STRLEN_P(str) || (l < 0 && -l > Z_STRLEN_P(str))) {
+ l = Z_STRLEN_P(str);
}
- if ((f + l) > Z_STRSIZE_P(str)) {
- l = Z_STRSIZE_P(str) - f;
+ if ((f + l) > Z_STRLEN_P(str)) {
+ l = Z_STRLEN_P(str) - f;
}
if (Z_TYPE_P(repl) == IS_ARRAY) {
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(repl), &pos_repl);
if (NULL != (tmp_repl = zend_hash_get_current_data_ex(Z_ARRVAL_P(repl), &pos_repl))) {
convert_to_string_ex(tmp_repl);
- repl_len = Z_STRSIZE_P(tmp_repl);
+ repl_len = Z_STRLEN_P(tmp_repl);
}
} else {
- repl_len = Z_STRSIZE_P(repl);
+ repl_len = Z_STRLEN_P(repl);
}
- result = STR_ALLOC(Z_STRSIZE_P(str) - l + repl_len, 0);
+ result = zend_string_alloc(Z_STRLEN_P(str) - l + repl_len, 0);
memcpy(result->val, Z_STRVAL_P(str), f);
if (repl_len) {
memcpy((result->val + f), (Z_TYPE_P(repl) == IS_ARRAY ? Z_STRVAL_P(tmp_repl) : Z_STRVAL_P(repl)), repl_len);
}
- memcpy((result->val + f + repl_len), Z_STRVAL_P(str) + f + l, Z_STRSIZE_P(str) - f - l);
+ memcpy((result->val + f + repl_len), Z_STRVAL_P(str) + f + l, Z_STRLEN_P(str) - f - l);
result->val[result->len] = '\0';
RETURN_NEW_STR(result);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Functionality of 'from' and 'len' as arrays is not implemented");
- RETURN_STR(STR_COPY(Z_STR_P(str)));
+ RETURN_STR(zend_string_copy(Z_STR_P(str)));
}
} else { /* str is array of strings */
zend_string *str_index = NULL;
- php_size_t result_len;
- php_uint_t num_index;
+ size_t result_len;
+ zend_ulong num_index;
array_init(return_value);
@@ -2458,57 +2443,57 @@ PHP_FUNCTION(substr_replace)
if (Z_TYPE_P(from) == IS_ARRAY) {
if (NULL != (tmp_from = zend_hash_get_current_data_ex(Z_ARRVAL_P(from), &pos_from))) {
- f = zval_get_int(tmp_from);
+ f = zval_get_long(tmp_from);
if (f < 0) {
- f = Z_STRSIZE_P(orig_str) + f;
+ f = Z_STRLEN_P(orig_str) + f;
if (f < 0) {
f = 0;
}
- } else if (f > Z_STRSIZE_P(orig_str)) {
- f = Z_STRSIZE_P(orig_str);
+ } else if (f > Z_STRLEN_P(orig_str)) {
+ f = Z_STRLEN_P(orig_str);
}
zend_hash_move_forward_ex(Z_ARRVAL_P(from), &pos_from);
} else {
f = 0;
}
} else {
- f = Z_IVAL_P(from);
+ f = Z_LVAL_P(from);
if (f < 0) {
- f = Z_STRSIZE_P(orig_str) + f;
+ f = Z_STRLEN_P(orig_str) + f;
if (f < 0) {
f = 0;
}
- } else if (f > Z_STRSIZE_P(orig_str)) {
- f = Z_STRSIZE_P(orig_str);
+ } else if (f > Z_STRLEN_P(orig_str)) {
+ f = Z_STRLEN_P(orig_str);
}
}
if (argc > 3 && Z_TYPE_P(len) == IS_ARRAY) {
if (NULL != (tmp_len = zend_hash_get_current_data_ex(Z_ARRVAL_P(len), &pos_len))) {
- l = zval_get_int(tmp_len);
+ l = zval_get_long(tmp_len);
zend_hash_move_forward_ex(Z_ARRVAL_P(len), &pos_len);
} else {
- l = Z_STRSIZE_P(orig_str);
+ l = Z_STRLEN_P(orig_str);
}
} else if (argc > 3) {
- l = Z_IVAL_P(len);
+ l = Z_LVAL_P(len);
} else {
- l = Z_STRSIZE_P(orig_str);
+ l = Z_STRLEN_P(orig_str);
}
if (l < 0) {
- l = (Z_STRSIZE_P(orig_str) - f) + l;
+ l = (Z_STRLEN_P(orig_str) - f) + l;
if (l < 0) {
l = 0;
}
}
- if ((f + l) > Z_STRSIZE_P(orig_str)) {
- l = Z_STRSIZE_P(orig_str) - f;
+ if ((f + l) > Z_STRLEN_P(orig_str)) {
+ l = Z_STRLEN_P(orig_str) - f;
}
- result_len = Z_STRSIZE_P(orig_str) - l;
+ result_len = Z_STRLEN_P(orig_str) - l;
if (Z_TYPE_P(repl) == IS_ARRAY) {
if (NULL != (tmp_repl = zend_hash_get_current_data_ex(Z_ARRVAL_P(repl), &pos_repl))) {
@@ -2533,30 +2518,30 @@ PHP_FUNCTION(substr_replace)
}
*/
- result_len += Z_STRSIZE_P(repl_str);
+ result_len += Z_STRLEN_P(repl_str);
zend_hash_move_forward_ex(Z_ARRVAL_P(repl), &pos_repl);
- result = STR_ALLOC(result_len, 0);
+ result = zend_string_alloc(result_len, 0);
memcpy(result->val, Z_STRVAL_P(orig_str), f);
- memcpy((result->val + f), Z_STRVAL_P(repl_str), Z_STRSIZE_P(repl_str));
- memcpy((result->val + f + Z_STRSIZE_P(repl_str)), Z_STRVAL_P(orig_str) + f + l, Z_STRSIZE_P(orig_str) - f - l);
+ memcpy((result->val + f), Z_STRVAL_P(repl_str), Z_STRLEN_P(repl_str));
+ memcpy((result->val + f + Z_STRLEN_P(repl_str)), Z_STRVAL_P(orig_str) + f + l, Z_STRLEN_P(orig_str) - f - l);
if(Z_TYPE_P(tmp_repl) != IS_STRING) {
zval_dtor(repl_str);
}
} else {
- result = STR_ALLOC(result_len, 0);
+ result = zend_string_alloc(result_len, 0);
memcpy(result->val, Z_STRVAL_P(orig_str), f);
- memcpy((result->val + f), Z_STRVAL_P(orig_str) + f + l, Z_STRSIZE_P(orig_str) - f - l);
+ memcpy((result->val + f), Z_STRVAL_P(orig_str) + f + l, Z_STRLEN_P(orig_str) - f - l);
}
} else {
- result_len += Z_STRSIZE_P(repl);
+ result_len += Z_STRLEN_P(repl);
- result = STR_ALLOC(result_len, 0);
+ result = zend_string_alloc(result_len, 0);
memcpy(result->val, Z_STRVAL_P(orig_str), f);
- memcpy((result->val + f), Z_STRVAL_P(repl), Z_STRSIZE_P(repl));
- memcpy((result->val + f + Z_STRSIZE_P(repl)), Z_STRVAL_P(orig_str) + f + l, Z_STRSIZE_P(orig_str) - f - l);
+ memcpy((result->val + f), Z_STRVAL_P(repl), Z_STRLEN_P(repl));
+ memcpy((result->val + f + Z_STRLEN_P(repl)), Z_STRVAL_P(orig_str) + f + l, Z_STRLEN_P(orig_str) - f - l);
}
result->val[result->len] = '\0';
@@ -2564,7 +2549,7 @@ PHP_FUNCTION(substr_replace)
if (str_index) {
zval tmp;
- ZVAL_STR(&tmp, result);
+ ZVAL_NEW_STR(&tmp, result);
zend_symtable_update(Z_ARRVAL_P(return_value), str_index, &tmp);
} else {
add_index_str(return_value, num_index, result);
@@ -2600,7 +2585,7 @@ PHP_FUNCTION(quotemeta)
RETURN_FALSE;
}
- str = STR_ALLOC(2 * old->len, 0);
+ str = zend_string_alloc(2 * old->len, 0);
for (p = old->val, q = str->val; p != old_end; p++) {
c = *p;
@@ -2625,7 +2610,7 @@ PHP_FUNCTION(quotemeta)
*q = '\0';
- RETURN_NEW_STR(STR_REALLOC(str, q - str->val, 0));
+ RETURN_NEW_STR(zend_string_realloc(str, q - str->val, 0));
}
/* }}} */
@@ -2633,8 +2618,8 @@ PHP_FUNCTION(quotemeta)
Returns ASCII value of character */
PHP_FUNCTION(ord)
{
- char *str;
- int str_len;
+ char *str;
+ size_t str_len;
#ifndef FAST_ZPP
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
@@ -2646,7 +2631,7 @@ PHP_FUNCTION(ord)
ZEND_PARSE_PARAMETERS_END();
#endif
- RETURN_INT((unsigned char) str[0]);
+ RETURN_LONG((unsigned char) str[0]);
}
/* }}} */
@@ -2654,14 +2639,14 @@ PHP_FUNCTION(ord)
Converts ASCII code to a character */
PHP_FUNCTION(chr)
{
- php_int_t c;
+ zend_long c;
char temp[2];
if (ZEND_NUM_ARGS() != 1) {
WRONG_PARAM_COUNT;
}
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "i", &c) == FAILURE) {
+ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "l", &c) == FAILURE) {
c = 0;
}
@@ -2743,7 +2728,7 @@ PHP_FUNCTION(ucwords)
zend_string *str;
char *delims = " \t\r\n\f\v";
register char *r, *r_end;
- int delims_len = 6;
+ size_t delims_len = 6;
char mask[256];
#ifndef FAST_ZPP
@@ -2768,7 +2753,7 @@ PHP_FUNCTION(ucwords)
r = Z_STRVAL_P(return_value);
*r = toupper((unsigned char) *r);
- for (r_end = r + Z_STRSIZE_P(return_value) - 1; r < r_end; ) {
+ for (r_end = r + Z_STRLEN_P(return_value) - 1; r < r_end; ) {
if (mask[(unsigned char)*r++]) {
*r = toupper((unsigned char) *r);
}
@@ -2778,9 +2763,9 @@ PHP_FUNCTION(ucwords)
/* {{{ php_strtr
*/
-PHPAPI char *php_strtr(char *str, php_size_t len, char *str_from, char *str_to, php_size_t trlen)
+PHPAPI char *php_strtr(char *str, size_t len, char *str_from, char *str_to, size_t trlen)
{
- php_size_t i;
+ size_t i;
unsigned char xlat[256];
if ((trlen < 1) || (len < 1)) {
@@ -2811,14 +2796,14 @@ static int php_strtr_key_compare(const void *a, const void *b TSRMLS_DC) /* {{{
/* }}} */
/* {{{ php_strtr_array */
-static void php_strtr_array(zval *return_value, char *str, php_size_t slen, HashTable *pats TSRMLS_DC)
+static void php_strtr_array(zval *return_value, char *str, size_t slen, HashTable *pats TSRMLS_DC)
{
- php_uint_t num_key;
+ zend_ulong num_key;
zend_string *str_key;
- php_size_t len, pos, found;
+ size_t len, pos, found;
int num_keys = 0;
- php_size_t minlen = 128*1024;
- php_size_t maxlen = 0;
+ size_t minlen = 128*1024;
+ size_t maxlen = 0;
HashTable str_hash, num_hash;
zval *entry, tmp, dummy;
char *key;
@@ -2856,7 +2841,7 @@ static void php_strtr_array(zval *return_value, char *str, php_size_t slen, Hash
zend_hash_init(&str_hash, zend_hash_num_elements(pats), NULL, NULL, 0);
ZEND_HASH_FOREACH_KEY_VAL(pats, num_key, str_key, entry) {
if (UNEXPECTED(!str_key)) {
- ZVAL_INT(&tmp, num_key);
+ ZVAL_LONG(&tmp, num_key);
convert_to_string(&tmp);
str_key = Z_STR(tmp);
len = str_key->len;
@@ -2912,10 +2897,10 @@ static void php_strtr_array(zval *return_value, char *str, php_size_t slen, Hash
entry = zend_hash_str_find(pats, key, len);
if (entry != NULL) {
zend_string *str = zval_get_string(entry);
- smart_str_appendl(&result, str->val, str->len);
+ smart_str_append(&result, str);
pos += len;
found = 1;
- STR_RELEASE(str);
+ zend_string_release(str);
break;
}
} ZEND_HASH_FOREACH_END();
@@ -2937,10 +2922,10 @@ static void php_strtr_array(zval *return_value, char *str, php_size_t slen, Hash
entry = zend_hash_str_find(pats, key, len);
if (entry != NULL) {
zend_string *str = zval_get_string(entry);
- smart_str_appendl(&result, str->val, str->len);
+ smart_str_append(&result, str);
pos += len;
found = 1;
- STR_RELEASE(str);
+ zend_string_release(str);
break;
}
}
@@ -2966,7 +2951,7 @@ PHP_FUNCTION(strtr)
{
zval *from;
char *str, *to = NULL;
- int str_len, to_len = 0;
+ size_t str_len, to_len = 0;
int ac = ZEND_NUM_ARGS();
#ifndef FAST_ZPP
@@ -3000,10 +2985,10 @@ PHP_FUNCTION(strtr)
ZVAL_STRINGL(return_value, str, str_len);
php_strtr(Z_STRVAL_P(return_value),
- Z_STRSIZE_P(return_value),
+ Z_STRLEN_P(return_value),
Z_STRVAL_P(from),
to,
- MIN(Z_STRSIZE_P(from),
+ MIN(Z_STRLEN_P(from),
to_len));
}
}
@@ -3021,7 +3006,7 @@ PHP_FUNCTION(strrev)
return;
}
- n = STR_ALLOC(str->len, 0);
+ n = zend_string_alloc(str->len, 0);
p = n->val;
e = str->val + str->len;
@@ -3038,12 +3023,12 @@ PHP_FUNCTION(strrev)
/* {{{ php_similar_str
*/
-static void php_similar_str(const char *txt1, php_size_t len1, const char *txt2, php_size_t len2, php_size_t *pos1, php_size_t *pos2, php_size_t *max)
+static void php_similar_str(const char *txt1, size_t len1, const char *txt2, size_t len2, size_t *pos1, size_t *pos2, size_t *max)
{
char *p, *q;
char *end1 = (char *) txt1 + len1;
char *end2 = (char *) txt2 + len2;
- php_size_t l;
+ size_t l;
*max = 0;
for (p = (char *) txt1; p < end1; p++) {
@@ -3061,10 +3046,10 @@ static void php_similar_str(const char *txt1, php_size_t len1, const char *txt2,
/* {{{ php_similar_char
*/
-static php_size_t php_similar_char(const char *txt1, php_size_t len1, const char *txt2, php_size_t len2)
+static size_t php_similar_char(const char *txt1, size_t len1, const char *txt2, size_t len2)
{
- php_size_t sum;
- php_size_t pos1 = 0, pos2 = 0, max;
+ size_t sum;
+ size_t pos1 = 0, pos2 = 0, max;
php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);
if ((sum = max)) {
@@ -3089,7 +3074,7 @@ PHP_FUNCTION(similar_text)
zend_string *t1, *t2;
zval *percent = NULL;
int ac = ZEND_NUM_ARGS();
- php_size_t sim;
+ size_t sim;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SS|z/", &t1, &t2, &percent) == FAILURE) {
return;
@@ -3104,7 +3089,7 @@ PHP_FUNCTION(similar_text)
Z_DVAL_P(percent) = 0;
}
- RETURN_INT(0);
+ RETURN_LONG(0);
}
sim = php_similar_char(t1->val, t1->len, t2->val, t2->len);
@@ -3113,17 +3098,17 @@ PHP_FUNCTION(similar_text)
Z_DVAL_P(percent) = sim * 200.0 / (t1->len + t2->len);
}
- RETURN_INT(sim);
+ RETURN_LONG(sim);
}
/* }}} */
/* {{{ php_stripslashes
*
* be careful, this edits the string in-place */
-PHPAPI void php_stripslashes(char *str, php_size_t *len TSRMLS_DC)
+PHPAPI void php_stripslashes(char *str, size_t *len TSRMLS_DC)
{
char *s, *t;
- php_size_t l;
+ size_t l;
if (len != NULL) {
l = *len;
@@ -3217,7 +3202,7 @@ PHP_FUNCTION(stripcslashes)
}
ZVAL_STRINGL(return_value, str->val, str->len);
- php_stripcslashes(Z_STRVAL_P(return_value), &Z_STRSIZE_P(return_value));
+ php_stripcslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value));
}
/* }}} */
@@ -3232,7 +3217,7 @@ PHP_FUNCTION(stripslashes)
}
ZVAL_STRINGL(return_value, str->val, str->len);
- php_stripslashes(Z_STRVAL_P(return_value), &Z_STRSIZE_P(return_value) TSRMLS_CC);
+ php_stripslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value) TSRMLS_CC);
}
/* }}} */
@@ -3257,10 +3242,10 @@ char *php_strerror(int errnum)
/* {{{ php_stripcslashes
*/
-PHPAPI void php_stripcslashes(char *str, php_size_t *len)
+PHPAPI void php_stripcslashes(char *str, size_t *len)
{
char *source, *target, *end;
- php_size_t nlen = *len, i;
+ size_t nlen = *len, i;
char numtmp[4];
for (source=str, end=str+nlen, target=str; source < end; source++) {
@@ -3320,14 +3305,14 @@ PHPAPI void php_stripcslashes(char *str, php_size_t *len)
/* {{{ php_addcslashes
*/
-PHPAPI zend_string *php_addcslashes(const char *str, php_size_t length, int should_free, char *what, php_size_t wlength TSRMLS_DC)
+PHPAPI zend_string *php_addcslashes(const char *str, size_t length, int should_free, char *what, size_t wlength TSRMLS_DC)
{
char flags[256];
char *source, *target;
char *end;
char c;
- php_size_t newlen;
- zend_string *new_str = STR_ALLOC(4 * (length? length : (length = strlen(str))), 0);
+ size_t newlen;
+ zend_string *new_str = zend_string_alloc(4 * (length? length : (length = strlen(str))), 0);
if (!wlength) {
wlength = strlen(what);
@@ -3359,7 +3344,7 @@ PHPAPI zend_string *php_addcslashes(const char *str, php_size_t length, int shou
*target = 0;
newlen = target - new_str->val;
if (newlen < length * 4) {
- new_str = STR_REALLOC(new_str, newlen, 0);
+ new_str = zend_string_realloc(new_str, newlen, 0);
}
if (should_free) {
efree((char*)str);
@@ -3370,7 +3355,7 @@ PHPAPI zend_string *php_addcslashes(const char *str, php_size_t length, int shou
/* {{{ php_addslashes
*/
-PHPAPI zend_string *php_addslashes(char *str, php_size_t length, int should_free TSRMLS_DC)
+PHPAPI zend_string *php_addslashes(char *str, size_t length, int should_free TSRMLS_DC)
{
/* maximum string length, worst case situation */
char *source, *target;
@@ -3381,7 +3366,7 @@ PHPAPI zend_string *php_addslashes(char *str, php_size_t length, int should_free
return STR_EMPTY_ALLOC();
}
- new_str = STR_ALLOC(2 * (length ? length : (length = strlen(str))), 0);
+ new_str = zend_string_alloc(2 * (length ? length : (length = strlen(str))), 0);
source = str;
end = source + length;
target = new_str->val;
@@ -3409,7 +3394,7 @@ PHPAPI zend_string *php_addslashes(char *str, php_size_t length, int should_free
if (should_free) {
efree(str);
}
- new_str = STR_REALLOC(new_str, target - new_str->val, 0);
+ new_str = zend_string_realloc(new_str, target - new_str->val, 0);
return new_str;
}
@@ -3423,10 +3408,10 @@ PHPAPI zend_string *php_addslashes(char *str, php_size_t length, int should_free
/* {{{ php_char_to_str_ex
*/
-PHPAPI php_size_t php_char_to_str_ex(char *str, php_size_t len, char from, char *to, php_size_t to_len, zval *result, int case_sensitivity, php_size_t *replace_count)
+PHPAPI size_t php_char_to_str_ex(char *str, size_t len, char from, char *to, size_t to_len, zval *result, int case_sensitivity, size_t *replace_count)
{
- php_size_t char_count = 0;
- php_size_t replaced = 0;
+ size_t char_count = 0;
+ size_t replaced = 0;
char *source, *target, *tmp, *source_end=str+len, *tmp_end = NULL;
if (case_sensitivity) {
@@ -3449,9 +3434,9 @@ PHPAPI php_size_t php_char_to_str_ex(char *str, php_size_t len, char from, char
}
if (to_len > 0) {
- ZVAL_NEW_STR(result, STR_SAFE_ALLOC(char_count, to_len - 1, len, 0));
+ ZVAL_NEW_STR(result, zend_string_safe_alloc(char_count, to_len - 1, len, 0));
} else {
- ZVAL_NEW_STR(result, STR_ALLOC(len - char_count, 0));
+ ZVAL_NEW_STR(result, zend_string_alloc(len - char_count, 0));
}
target = Z_STRVAL_P(result);
@@ -3496,7 +3481,7 @@ PHPAPI php_size_t php_char_to_str_ex(char *str, php_size_t len, char from, char
/* {{{ php_char_to_str
*/
-PHPAPI php_size_t php_char_to_str(char *str, php_size_t len, char from, char *to, php_size_t to_len, zval *result)
+PHPAPI size_t php_char_to_str(char *str, size_t len, char from, char *to, size_t to_len, zval *result)
{
return php_char_to_str_ex(str, len, from, to, to_len, result, 1, NULL);
}
@@ -3504,8 +3489,8 @@ PHPAPI php_size_t php_char_to_str(char *str, php_size_t len, char from, char *to
/* {{{ php_str_to_str_ex
*/
-PHPAPI zend_string *php_str_to_str_ex(char *haystack, php_size_t length,
- char *needle, php_size_t needle_len, char *str, php_size_t str_len, int case_sensitivity, php_size_t *replace_count)
+PHPAPI zend_string *php_str_to_str_ex(char *haystack, size_t length,
+ char *needle, size_t needle_len, char *str, size_t str_len, int case_sensitivity, size_t *replace_count)
{
zend_string *new_str;
@@ -3514,7 +3499,7 @@ PHPAPI zend_string *php_str_to_str_ex(char *haystack, php_size_t length,
char *e, *s, *p, *r;
if (needle_len == str_len) {
- new_str = STR_INIT(haystack, length, 0);
+ new_str = zend_string_init(haystack, length, 0);
if (case_sensitivity) {
end = new_str->val + length;
@@ -3549,9 +3534,9 @@ PHPAPI zend_string *php_str_to_str_ex(char *haystack, php_size_t length,
}
if (str_len < needle_len) {
- new_str = STR_ALLOC(length, 0);
+ new_str = zend_string_alloc(length, 0);
} else {
- php_size_t count = 0;
+ size_t count = 0;
char *o, *n, *endp;
if (case_sensitivity) {
@@ -3575,10 +3560,10 @@ PHPAPI zend_string *php_str_to_str_ex(char *haystack, php_size_t length,
if (needle_dup) {
efree(needle_dup);
}
- new_str = STR_INIT(haystack, length, 0);
+ new_str = zend_string_init(haystack, length, 0);
return new_str;
} else {
- new_str = STR_ALLOC(count * (str_len - needle_len) + length, 0);
+ new_str = zend_string_alloc(count * (str_len - needle_len) + length, 0);
}
}
@@ -3628,12 +3613,12 @@ PHPAPI zend_string *php_str_to_str_ex(char *haystack, php_size_t length,
*e = '\0';
- new_str = STR_REALLOC(new_str, e - s, 0);
+ new_str = zend_string_realloc(new_str, e - s, 0);
return new_str;
}
} else if (needle_len > length) {
nothing_todo:
- new_str = STR_INIT(haystack, length, 0);
+ new_str = zend_string_init(haystack, length, 0);
return new_str;
} else {
if (case_sensitivity && memcmp(haystack, needle, length)) {
@@ -3656,7 +3641,7 @@ nothing_todo:
efree(l_needle);
}
- new_str = STR_INIT(str, str_len, 0);
+ new_str = zend_string_init(str, str_len, 0);
if (replace_count) {
(*replace_count)++;
@@ -3669,7 +3654,7 @@ nothing_todo:
/* {{{ php_str_to_str
*/
-PHPAPI zend_string *php_str_to_str(char *haystack, php_size_t length, char *needle, php_size_t needle_len, char *str, php_size_t str_len)
+PHPAPI zend_string *php_str_to_str(char *haystack, size_t length, char *needle, size_t needle_len, char *str, size_t str_len)
{
return php_str_to_str_ex(haystack, length, needle, needle_len, str, str_len, 1, NULL);
}
@@ -3677,14 +3662,14 @@ PHPAPI zend_string *php_str_to_str(char *haystack, php_size_t length, char *need
/* {{{ php_str_replace_in_subject
*/
-static void php_str_replace_in_subject(zval *search, zval *replace, zval *subject, zval *result, int case_sensitivity, php_size_t *replace_count TSRMLS_DC)
+static void php_str_replace_in_subject(zval *search, zval *replace, zval *subject, zval *result, int case_sensitivity, size_t *replace_count TSRMLS_DC)
{
zval *search_entry,
*replace_entry = NULL,
temp_result,
tmp_subject;
char *replace_value = NULL;
- php_size_t replace_len = 0;
+ size_t replace_len = 0;
HashPosition pos;
/* Make sure we're dealing with strings. */
@@ -3697,7 +3682,7 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
convert_to_string_ex(&tmp_subject);
subject = &tmp_subject;
}
- if (Z_STRSIZE_P(subject) == 0) {
+ if (Z_STRLEN_P(subject) == 0) {
zval_ptr_dtor(&tmp_subject);
ZVAL_EMPTY_STRING(result);
return;
@@ -3714,7 +3699,7 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
} else {
/* Set replacement value to the passed one */
replace_value = Z_STRVAL_P(replace);
- replace_len = Z_STRSIZE_P(replace);
+ replace_len = Z_STRLEN_P(replace);
}
/* For each entry in the search array, get the entry */
@@ -3722,7 +3707,7 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
/* Make sure we're dealing with strings. */
SEPARATE_ZVAL(search_entry);
convert_to_string(search_entry);
- if (Z_STRSIZE_P(search_entry) == 0) {
+ if (Z_STRLEN_P(search_entry) == 0) {
if (Z_TYPE_P(replace) == IS_ARRAY) {
zend_hash_move_forward_ex(Z_ARRVAL_P(replace), &pos);
}
@@ -3738,7 +3723,7 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
/* Set replacement value to the one we got from array */
replace_value = Z_STRVAL_P(replace_entry);
- replace_len = Z_STRSIZE_P(replace_entry);
+ replace_len = Z_STRLEN_P(replace_entry);
zend_hash_move_forward_ex(Z_ARRVAL_P(replace), &pos);
} else {
@@ -3748,44 +3733,44 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
}
}
- if (Z_STRSIZE_P(search_entry) == 1) {
+ if (Z_STRLEN_P(search_entry) == 1) {
php_char_to_str_ex(Z_STRVAL_P(result),
- Z_STRSIZE_P(result),
+ Z_STRLEN_P(result),
Z_STRVAL_P(search_entry)[0],
replace_value,
replace_len,
&temp_result,
case_sensitivity,
replace_count);
- } else if (Z_STRSIZE_P(search_entry) > 1) {
- ZVAL_STR(&temp_result, php_str_to_str_ex(Z_STRVAL_P(result), Z_STRSIZE_P(result),
- Z_STRVAL_P(search_entry), Z_STRSIZE_P(search_entry),
+ } else if (Z_STRLEN_P(search_entry) > 1) {
+ ZVAL_STR(&temp_result, php_str_to_str_ex(Z_STRVAL_P(result), Z_STRLEN_P(result),
+ Z_STRVAL_P(search_entry), Z_STRLEN_P(search_entry),
replace_value, replace_len, case_sensitivity, replace_count));
}
- STR_FREE(Z_STR_P(result));
+ zend_string_free(Z_STR_P(result));
Z_STR_P(result) = Z_STR(temp_result);
Z_TYPE_INFO_P(result) = Z_TYPE_INFO(temp_result);
- if (Z_STRSIZE_P(result) == 0) {
+ if (Z_STRLEN_P(result) == 0) {
zval_ptr_dtor(&tmp_subject);
return;
}
} ZEND_HASH_FOREACH_END();
} else {
- if (Z_STRSIZE_P(search) == 1) {
+ if (Z_STRLEN_P(search) == 1) {
php_char_to_str_ex(Z_STRVAL_P(subject),
- Z_STRSIZE_P(subject),
+ Z_STRLEN_P(subject),
Z_STRVAL_P(search)[0],
Z_STRVAL_P(replace),
- Z_STRSIZE_P(replace),
+ Z_STRLEN_P(replace),
result,
case_sensitivity,
replace_count);
- } else if (Z_STRSIZE_P(search) > 1) {
- ZVAL_STR(result, php_str_to_str_ex(Z_STRVAL_P(subject), Z_STRSIZE_P(subject),
- Z_STRVAL_P(search), Z_STRSIZE_P(search),
- Z_STRVAL_P(replace), Z_STRSIZE_P(replace), case_sensitivity, replace_count));
+ } else if (Z_STRLEN_P(search) > 1) {
+ ZVAL_STR(result, php_str_to_str_ex(Z_STRVAL_P(subject), Z_STRLEN_P(subject),
+ Z_STRVAL_P(search), Z_STRLEN_P(search),
+ Z_STRVAL_P(replace), Z_STRLEN_P(replace), case_sensitivity, replace_count));
} else {
ZVAL_DUP(result, subject);
}
@@ -3801,8 +3786,8 @@ static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensit
zval *subject, *search, *replace, *subject_entry, *zcount = NULL;
zval result;
zend_string *string_key;
- php_uint_t num_key;
- php_int_t count = 0;
+ zend_ulong num_key;
+ size_t count = 0;
int argc = ZEND_NUM_ARGS();
#ifndef FAST_ZPP
@@ -3856,7 +3841,7 @@ static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensit
}
if (argc > 3) {
zval_dtor(zcount);
- ZVAL_INT(zcount, count);
+ ZVAL_LONG(zcount, count);
}
}
/* }}} */
@@ -3886,13 +3871,13 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
{
char *str;
char *heb_str, *tmp, *target;
- int block_start, block_end, block_type, block_length, i;
- php_int_t max_chars=0;
- int begin, end, char_count, orig_begin;
- int str_len;
+ size_t block_start, block_end, block_type, block_length, i;
+ zend_long max_chars=0;
+ size_t begin, end, char_count, orig_begin;
+ size_t str_len;
zend_string *broken_str;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &str, &str_len, &max_chars) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &str_len, &max_chars) == FAILURE) {
return;
}
@@ -3923,8 +3908,8 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
block_end++;
block_length++;
}
- for (i = block_start; i<= block_end; i++) {
- *target = str[i];
+ for (i = block_start+1; i<= block_end+1; i++) {
+ *target = str[i-1];
switch (*target) {
case '(':
*target = ')';
@@ -3972,8 +3957,8 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
tmp--;
block_end--;
}
- for (i = block_end; i >= block_start; i--) {
- *target = str[i];
+ for (i = block_end+1; i >= block_start+1; i--) {
+ *target = str[i-1];
target--;
}
block_type = _HEB_BLOCK_TYPE_HEB;
@@ -3982,13 +3967,13 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
} while (block_end < str_len-1);
- broken_str = STR_ALLOC(str_len, 0);
+ broken_str = zend_string_alloc(str_len, 0);
begin = end = str_len-1;
target = broken_str->val;
while (1) {
char_count=0;
- while ((!max_chars || char_count < max_chars) && begin > 0) {
+ while ((!max_chars || (max_chars > 0 && char_count < max_chars)) && begin > 0) {
char_count++;
begin--;
if (begin <= 0 || _isnewline(heb_str[begin])) {
@@ -3999,8 +3984,8 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
break;
}
}
- if (char_count == max_chars) { /* try to avoid breaking words */
- int new_char_count=char_count, new_begin=begin;
+ if (max_chars >= 0 && char_count == max_chars) { /* try to avoid breaking words */
+ size_t new_char_count=char_count, new_begin=begin;
while (new_char_count > 0) {
if (_isblank(heb_str[new_begin]) || _isnewline(heb_str[new_begin])) {
@@ -4042,7 +4027,7 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
if (convert_newlines) {
php_char_to_str(broken_str->val, broken_str->len,'\n', "<br />\n", 7, return_value);
- STR_FREE(broken_str);
+ zend_string_free(broken_str);
} else {
RETURN_NEW_STR(broken_str);
}
@@ -4073,7 +4058,7 @@ PHP_FUNCTION(nl2br)
char *tmp;
zend_string *str;
char *end, *target;
- php_size_t repl_cnt = 0;
+ size_t repl_cnt = 0;
zend_bool is_xhtml = 1;
zend_string *result;
@@ -4109,7 +4094,7 @@ PHP_FUNCTION(nl2br)
{
size_t repl_len = is_xhtml ? (sizeof("<br />") - 1) : (sizeof("<br>") - 1);
- result = STR_ALLOC(repl_cnt * repl_len + str->len, 0);
+ result = zend_string_alloc(repl_cnt * repl_len + str->len, 0);
target = result->val;
}
@@ -4154,7 +4139,7 @@ PHP_FUNCTION(strip_tags)
zend_string *str;
zval *allow=NULL;
char *allowed_tags=NULL;
- int allowed_tags_len=0;
+ size_t allowed_tags_len=0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|z", &str, &allow) == FAILURE) {
return;
@@ -4164,20 +4149,20 @@ PHP_FUNCTION(strip_tags)
if (allow != NULL) {
convert_to_string_ex(allow);
// TODO: reimplement to avoid reallocation ???
- if (IS_INTERNED(Z_STR_P(allow))) {
- allowed_tags = estrndup(Z_STRVAL_P(allow), Z_STRSIZE_P(allow));
- allowed_tags_len = Z_STRSIZE_P(allow);
+ if (!Z_REFCOUNTED_P(allow)) {
+ allowed_tags = estrndup(Z_STRVAL_P(allow), Z_STRLEN_P(allow));
+ allowed_tags_len = Z_STRLEN_P(allow);
} else {
allowed_tags = Z_STRVAL_P(allow);
- allowed_tags_len = Z_STRSIZE_P(allow);
+ allowed_tags_len = Z_STRLEN_P(allow);
}
}
- buf = STR_INIT(str->val, str->len, 0);
+ buf = zend_string_init(str->val, str->len, 0);
buf->len = php_strip_tags_ex(buf->val, str->len, NULL, allowed_tags, allowed_tags_len, 0);
// TODO: reimplement to avoid reallocation ???
- if (allow && IS_INTERNED(Z_STR_P(allow))) {
+ if (allow && !Z_REFCOUNTED_P(allow)) {
efree(allowed_tags);
}
RETURN_STR(buf);
@@ -4199,8 +4184,8 @@ PHP_FUNCTION(setlocale)
}
#ifdef HAVE_SETLOCALE
- if (Z_TYPE_P(pcategory) == IS_INT) {
- cat = Z_IVAL_P(pcategory);
+ if (Z_TYPE_P(pcategory) == IS_LONG) {
+ cat = Z_LVAL_P(pcategory);
} else {
/* FIXME: The following behaviour should be removed. */
char *category;
@@ -4261,7 +4246,7 @@ PHP_FUNCTION(setlocale)
loc = NULL;
} else {
loc = Z_STRVAL(tmp);
- if (Z_STRSIZE(tmp) >= 255) {
+ if (Z_STRLEN(tmp) >= 255) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Specified locale name is too long");
zval_dtor(&tmp);
break;
@@ -4273,7 +4258,7 @@ PHP_FUNCTION(setlocale)
if (retval) {
/* Remember if locale was changed */
if (loc) {
-//??? STR_FREE(BG(locale_string));
+//??? zend_string_free(BG(locale_string));
if (BG(locale_string)) {
efree(BG(locale_string));
}
@@ -4304,7 +4289,7 @@ PHP_FUNCTION(parse_str)
char *arg;
zval *arrayArg = NULL;
char *res = NULL;
- int arglen;
+ size_t arglen;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/", &arg, &arglen, &arrayArg) == FAILURE) {
return;
@@ -4341,7 +4326,7 @@ PHP_FUNCTION(parse_str)
* 0 start tag
* 1 first non-whitespace char seen
*/
-int php_tag_find(char *tag, php_size_t len, char *set) {
+int php_tag_find(char *tag, size_t len, char *set) {
char c, *n, *t;
int state=0, done=0;
char *norm;
@@ -4396,7 +4381,7 @@ int php_tag_find(char *tag, php_size_t len, char *set) {
}
/* }}} */
-PHPAPI php_size_t php_strip_tags(char *rbuf, php_size_t len, int *stateptr, char *allow, php_size_t allow_len) /* {{{ */
+PHPAPI size_t php_strip_tags(char *rbuf, size_t len, int *stateptr, char *allow, size_t allow_len) /* {{{ */
{
return php_strip_tags_ex(rbuf, len, stateptr, allow, allow_len, 0);
}
@@ -4422,11 +4407,12 @@ PHPAPI php_size_t php_strip_tags(char *rbuf, php_size_t len, int *stateptr, char
swm: Added ability to strip <?xml tags without assuming it PHP
code.
*/
-PHPAPI size_t php_strip_tags_ex(char *rbuf, php_size_t len, int *stateptr, char *allow, php_size_t allow_len, zend_bool allow_tag_spaces)
+PHPAPI size_t php_strip_tags_ex(char *rbuf, size_t len, int *stateptr, char *allow, size_t allow_len, zend_bool allow_tag_spaces)
{
char *tbuf, *buf, *p, *tp, *rp, c, lc;
- int br, i=0, depth=0, in_q = 0;
- int state = 0, pos;
+ int br, depth=0, in_q = 0;
+ int state = 0;
+ size_t pos, i = 0;
char *allow_free = NULL;
if (stateptr)
@@ -4703,7 +4689,7 @@ PHP_FUNCTION(str_getcsv)
zend_string *str;
char delim = ',', enc = '"', esc = '\\';
char *delim_str = NULL, *enc_str = NULL, *esc_str = NULL;
- int delim_len = 0, enc_len = 0, esc_len = 0;
+ size_t delim_len = 0, enc_len = 0, esc_len = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|sss", &str, &delim_str, &delim_len,
&enc_str, &enc_len, &esc_str, &esc_len) == FAILURE) {
@@ -4723,11 +4709,11 @@ PHP_FUNCTION(str_getcsv)
PHP_FUNCTION(str_repeat)
{
zend_string *input_str; /* Input string */
- php_int_t mult; /* Multiplier */
+ zend_long mult; /* Multiplier */
zend_string *result; /* Resulting string */
size_t result_len; /* Length of the resulting string */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Si", &input_str, &mult) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sl", &input_str, &mult) == FAILURE) {
return;
}
@@ -4742,7 +4728,7 @@ PHP_FUNCTION(str_repeat)
RETURN_EMPTY_STRING();
/* Initialize the result string */
- result = STR_SAFE_ALLOC(input_str->len, mult, 0, 0);
+ result = zend_string_safe_alloc(input_str->len, mult, 0, 0);
result_len = input_str->len * mult;
/* Heavy optimization for situations where input string is 1 byte long */
@@ -4775,14 +4761,14 @@ PHP_FUNCTION(count_chars)
{
zend_string *input;
int chars[256];
- php_int_t mymode=0;
+ zend_long mymode=0;
unsigned char *buf;
int inx;
char retstr[256];
- php_size_t retlen=0;
- php_size_t tmp = 0;
+ size_t retlen=0;
+ size_t tmp = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|i", &input, &mymode) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|l", &input, &mymode) == FAILURE) {
return;
}
@@ -4807,16 +4793,16 @@ PHP_FUNCTION(count_chars)
for (inx = 0; inx < 256; inx++) {
switch (mymode) {
case 0:
- add_index_int(return_value, inx, chars[inx]);
+ add_index_long(return_value, inx, chars[inx]);
break;
case 1:
if (chars[inx] != 0) {
- add_index_int(return_value, inx, chars[inx]);
+ add_index_long(return_value, inx, chars[inx]);
}
break;
case 2:
if (chars[inx] == 0) {
- add_index_int(return_value, inx, chars[inx]);
+ add_index_long(return_value, inx, chars[inx]);
}
break;
case 3:
@@ -4848,7 +4834,7 @@ static void php_strnatcmp(INTERNAL_FUNCTION_PARAMETERS, int fold_case)
return;
}
- RETURN_INT(strnatcmp_ex(s1->val, s1->len,
+ RETURN_LONG(strnatcmp_ex(s1->val, s1->len,
s2->val, s2->len,
fold_case));
}
@@ -4859,10 +4845,10 @@ PHPAPI int string_natural_compare_function_ex(zval *result, zval *op1, zval *op2
zend_string *str1 = zval_get_string(op1);
zend_string *str2 = zval_get_string(op2);
- ZVAL_INT(result, strnatcmp_ex(str1->val, str1->len, str2->val, str2->len, case_insensitive));
+ ZVAL_LONG(result, strnatcmp_ex(str1->val, str1->len, str2->val, str2->len, case_insensitive));
- STR_RELEASE(str1);
- STR_RELEASE(str2);
+ zend_string_release(str1);
+ zend_string_release(str2);
return SUCCESS;
}
/* }}} */
@@ -4913,14 +4899,14 @@ PHP_FUNCTION(localeconv)
len = strlen(currlocdata.grouping);
for (i = 0; i < len; i++) {
- add_index_int(&grouping, i, currlocdata.grouping[i]);
+ add_index_long(&grouping, i, currlocdata.grouping[i]);
}
/* Grab the monetary grouping data out of the array */
len = strlen(currlocdata.mon_grouping);
for (i = 0; i < len; i++) {
- add_index_int(&mon_grouping, i, currlocdata.mon_grouping[i]);
+ add_index_long(&mon_grouping, i, currlocdata.mon_grouping[i]);
}
add_assoc_string(return_value, "decimal_point", currlocdata.decimal_point);
@@ -4931,21 +4917,21 @@ PHP_FUNCTION(localeconv)
add_assoc_string(return_value, "mon_thousands_sep", currlocdata.mon_thousands_sep);
add_assoc_string(return_value, "positive_sign", currlocdata.positive_sign);
add_assoc_string(return_value, "negative_sign", currlocdata.negative_sign);
- add_assoc_int( return_value, "int_frac_digits", currlocdata.int_frac_digits);
- add_assoc_int( return_value, "frac_digits", currlocdata.frac_digits);
- add_assoc_int( return_value, "p_cs_precedes", currlocdata.p_cs_precedes);
- add_assoc_int( return_value, "p_sep_by_space", currlocdata.p_sep_by_space);
- add_assoc_int( return_value, "n_cs_precedes", currlocdata.n_cs_precedes);
- add_assoc_int( return_value, "n_sep_by_space", currlocdata.n_sep_by_space);
- add_assoc_int( return_value, "p_sign_posn", currlocdata.p_sign_posn);
- add_assoc_int( return_value, "n_sign_posn", currlocdata.n_sign_posn);
+ add_assoc_long( return_value, "int_frac_digits", currlocdata.int_frac_digits);
+ add_assoc_long( return_value, "frac_digits", currlocdata.frac_digits);
+ add_assoc_long( return_value, "p_cs_precedes", currlocdata.p_cs_precedes);
+ add_assoc_long( return_value, "p_sep_by_space", currlocdata.p_sep_by_space);
+ add_assoc_long( return_value, "n_cs_precedes", currlocdata.n_cs_precedes);
+ add_assoc_long( return_value, "n_sep_by_space", currlocdata.n_sep_by_space);
+ add_assoc_long( return_value, "p_sign_posn", currlocdata.p_sign_posn);
+ add_assoc_long( return_value, "n_sign_posn", currlocdata.n_sign_posn);
}
#else
/* Ok, it doesn't look like we have locale info floating around, so I guess it
wouldn't hurt to just go ahead and return the POSIX locale information? */
- add_index_int(&grouping, 0, -1);
- add_index_int(&mon_grouping, 0, -1);
+ add_index_long(&grouping, 0, -1);
+ add_index_long(&mon_grouping, 0, -1);
add_assoc_string(return_value, "decimal_point", "\x2E");
add_assoc_string(return_value, "thousands_sep", "");
@@ -4955,14 +4941,14 @@ PHP_FUNCTION(localeconv)
add_assoc_string(return_value, "mon_thousands_sep", "");
add_assoc_string(return_value, "positive_sign", "");
add_assoc_string(return_value, "negative_sign", "");
- add_assoc_int( return_value, "int_frac_digits", CHAR_MAX);
- add_assoc_int( return_value, "frac_digits", CHAR_MAX);
- add_assoc_int( return_value, "p_cs_precedes", CHAR_MAX);
- add_assoc_int( return_value, "p_sep_by_space", CHAR_MAX);
- add_assoc_int( return_value, "n_cs_precedes", CHAR_MAX);
- add_assoc_int( return_value, "n_sep_by_space", CHAR_MAX);
- add_assoc_int( return_value, "p_sign_posn", CHAR_MAX);
- add_assoc_int( return_value, "n_sign_posn", CHAR_MAX);
+ add_assoc_long( return_value, "int_frac_digits", CHAR_MAX);
+ add_assoc_long( return_value, "frac_digits", CHAR_MAX);
+ add_assoc_long( return_value, "p_cs_precedes", CHAR_MAX);
+ add_assoc_long( return_value, "p_sep_by_space", CHAR_MAX);
+ add_assoc_long( return_value, "n_cs_precedes", CHAR_MAX);
+ add_assoc_long( return_value, "n_sep_by_space", CHAR_MAX);
+ add_assoc_long( return_value, "p_sign_posn", CHAR_MAX);
+ add_assoc_long( return_value, "n_sign_posn", CHAR_MAX);
#endif
zend_hash_str_update(Z_ARRVAL_P(return_value), "grouping", sizeof("grouping")-1, &grouping);
@@ -4983,13 +4969,13 @@ PHP_FUNCTION(strnatcasecmp)
PHP_FUNCTION(substr_count)
{
char *haystack, *needle;
- php_int_t offset = 0, length = 0;
+ zend_long offset = 0, length = 0;
int ac = ZEND_NUM_ARGS();
int count = 0;
- int haystack_len, needle_len;
+ size_t haystack_len, needle_len;
char *p, *endp, cmp;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ii", &haystack, &haystack_len, &needle, &needle_len, &offset, &length) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ll", &haystack, &haystack_len, &needle, &needle_len, &offset, &length) == FAILURE) {
return;
}
@@ -5006,8 +4992,8 @@ PHP_FUNCTION(substr_count)
RETURN_FALSE;
}
- if (offset > haystack_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset value " ZEND_INT_FMT " exceeds string length", offset);
+ if ((size_t)offset > haystack_len) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset value " ZEND_LONG_FMT " exceeds string length", offset);
RETURN_FALSE;
}
p += offset;
@@ -5019,7 +5005,7 @@ PHP_FUNCTION(substr_count)
RETURN_FALSE;
}
if (length > (haystack_len - offset)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length value " ZEND_INT_FMT " exceeds string length", length);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length value " ZEND_LONG_FMT " exceeds string length", length);
RETURN_FALSE;
}
endp = p + length;
@@ -5039,7 +5025,7 @@ PHP_FUNCTION(substr_count)
}
}
- RETURN_INT(count);
+ RETURN_LONG(count);
}
/* }}} */
@@ -5049,36 +5035,27 @@ PHP_FUNCTION(str_pad)
{
/* Input arguments */
zend_string *input; /* Input string */
- php_int_t pad_length; /* Length to pad to */
+ zend_long pad_length; /* Length to pad to */
/* Helper variables */
size_t num_pad_chars; /* Number of padding characters (total - input size) */
- zend_string *pad_str, *pad_str_save; /* Pointer to padding string */
- php_int_t pad_type_val = STR_PAD_RIGHT; /* The padding type value */
- int i, left_pad=0, right_pad=0;
+ char *pad_str = " "; /* Pointer to padding string */
+ size_t pad_str_len = 1;
+ zend_long pad_type_val = STR_PAD_RIGHT; /* The padding type value */
+ size_t i, left_pad=0, right_pad=0;
zend_string *result = NULL; /* Resulting string */
- pad_str = pad_str_save = STR_INIT(" ", 1, 1);
- if (!pad_str) {
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Si|Si", &input, &pad_length, &pad_str, &pad_type_val) == FAILURE) {
- STR_FREE(pad_str);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sl|sl", &input, &pad_length, &pad_str, &pad_str_len, &pad_type_val) == FAILURE) {
return;
}
- if (pad_str != pad_str_save) {
- STR_FREE(pad_str_save);
- }
-
/* If resulting string turns out to be shorter than input string,
we simply copy the input and return. */
- if (pad_length < 0 || pad_length <= input->len) {
+ if (pad_length < 0 || (size_t)pad_length <= input->len) {
RETURN_STRINGL(input->val, input->len);
}
- if (pad_str->len == 0) {
+ if (pad_str_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Padding string cannot be empty");
return;
}
@@ -5094,7 +5071,7 @@ PHP_FUNCTION(str_pad)
return;
}
- result = STR_ALLOC(input->len + num_pad_chars, 0);
+ result = zend_string_alloc(input->len + num_pad_chars, 0);
result->len = 0;
/* We need to figure out the left/right padding lengths. */
@@ -5117,7 +5094,7 @@ PHP_FUNCTION(str_pad)
/* First we pad on the left. */
for (i = 0; i < left_pad; i++)
- result->val[result->len++] = pad_str->val[i % pad_str->len];
+ result->val[result->len++] = pad_str[i % pad_str_len];
/* Then we copy the input string. */
memcpy(result->val + result->len, input->val, input->len);
@@ -5125,7 +5102,7 @@ PHP_FUNCTION(str_pad)
/* Finally, we pad on the right. */
for (i = 0; i < right_pad; i++)
- result->val[result->len++] = pad_str->val[i % pad_str->len];
+ result->val[result->len++] = pad_str[i % pad_str_len];
result->val[result->len] = '\0';
@@ -5139,7 +5116,8 @@ PHP_FUNCTION(sscanf)
{
zval *args = NULL;
char *str, *format;
- int str_len, format_len, result, num_args = 0;
+ size_t str_len, format_len;
+ int result, num_args = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss*", &str, &str_len, &format, &format_len,
&args, &num_args) == FAILURE) {
@@ -5169,13 +5147,13 @@ PHP_FUNCTION(str_rot13)
RETVAL_STRINGL(arg->val, arg->len);
- php_strtr(Z_STRVAL_P(return_value), Z_STRSIZE_P(return_value), rot13_from, rot13_to, 52);
+ php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), rot13_from, rot13_to, 52);
}
/* }}} */
-static void php_string_shuffle(char *str, php_int_t len TSRMLS_DC) /* {{{ */
+static void php_string_shuffle(char *str, zend_long len TSRMLS_DC) /* {{{ */
{
- php_int_t n_elems, rnd_idx, n_left;
+ zend_long n_elems, rnd_idx, n_left;
char temp;
/* The implementation is stolen from array_data_shuffle */
/* Thus the characteristics of the randomization are the same */
@@ -5210,8 +5188,8 @@ PHP_FUNCTION(str_shuffle)
}
RETVAL_STRINGL(arg->val, arg->len);
- if (Z_STRSIZE_P(return_value) > 1) {
- php_string_shuffle(Z_STRVAL_P(return_value), (php_int_t) Z_STRSIZE_P(return_value) TSRMLS_CC);
+ if (Z_STRLEN_P(return_value) > 1) {
+ php_string_shuffle(Z_STRVAL_P(return_value), (zend_long) Z_STRLEN_P(return_value) TSRMLS_CC);
}
}
/* }}} */
@@ -5231,10 +5209,10 @@ PHP_FUNCTION(str_word_count)
{
zend_string *str;
char *char_list = NULL, *p, *e, *s, ch[256];
- int char_list_len = 0, word_count = 0;
- php_int_t type = 0;
+ size_t char_list_len = 0, word_count = 0;
+ zend_long type = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|is", &str, &type, &char_list, &char_list_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|ls", &str, &type, &char_list, &char_list_len) == FAILURE) {
return;
}
@@ -5248,12 +5226,12 @@ PHP_FUNCTION(str_word_count)
break;
case 0:
if (!str->len) {
- RETURN_INT(0);
+ RETURN_LONG(0);
}
/* nothing to be done */
break;
default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid format value " ZEND_INT_FMT, type);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid format value " ZEND_LONG_FMT, type);
RETURN_FALSE;
}
@@ -5296,7 +5274,7 @@ PHP_FUNCTION(str_word_count)
}
if (!type) {
- RETURN_INT(word_count);
+ RETURN_LONG(word_count);
}
}
@@ -5307,7 +5285,7 @@ PHP_FUNCTION(str_word_count)
Convert monetary value(s) to string */
PHP_FUNCTION(money_format)
{
- int format_len = 0;
+ size_t format_len = 0;
char *format, *p, *e;
double value;
zend_bool check = 0;
@@ -5331,14 +5309,14 @@ PHP_FUNCTION(money_format)
}
}
- str = STR_ALLOC(format_len + 1024, 0);
+ str = zend_string_alloc(format_len + 1024, 0);
if ((str->len = strfmon(str->val, str->len, format, value)) < 0) {
- STR_FREE(str);
+ zend_string_free(str);
RETURN_FALSE;
}
str->val[str->len] = '\0';
- RETURN_NEW_STR(STR_REALLOC(str, str->len, 0));
+ RETURN_NEW_STR(zend_string_realloc(str, str->len, 0));
}
/* }}} */
#endif
@@ -5348,11 +5326,11 @@ PHP_FUNCTION(money_format)
PHP_FUNCTION(str_split)
{
zend_string *str;
- php_int_t split_length = 1;
+ zend_long split_length = 1;
char *p;
- php_size_t n_reg_segments;
+ size_t n_reg_segments;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|i", &str, &split_length) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|l", &str, &split_length) == FAILURE) {
return;
}
@@ -5362,7 +5340,7 @@ PHP_FUNCTION(str_split)
}
- if (0 == str->len || split_length >= str->len) {
+ if (0 == str->len || (size_t)split_length >= str->len) {
array_init_size(return_value, 1);
add_next_index_stringl(return_value, str->val, str->len);
return;
@@ -5417,17 +5395,17 @@ PHP_FUNCTION(strpbrk)
PHP_FUNCTION(substr_compare)
{
zend_string *s1, *s2;
- php_int_t offset, len=0;
+ zend_long offset, len=0;
zend_bool cs=0;
- php_size_t cmp_len;
+ size_t cmp_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SSi|ib", &s1, &s2, &offset, &len, &cs) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SSl|lb", &s1, &s2, &offset, &len, &cs) == FAILURE) {
RETURN_FALSE;
}
if (ZEND_NUM_ARGS() >= 4 && len <= 0) {
if (len == 0) {
- RETURN_INT(0L);
+ RETURN_LONG(0L);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The length must be greater than or equal to zero");
RETURN_FALSE;
@@ -5439,17 +5417,17 @@ PHP_FUNCTION(substr_compare)
offset = (offset < 0) ? 0 : offset;
}
- if (offset >= s1->len) {
+ if ((size_t)offset >= s1->len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The start position cannot exceed initial string length");
RETURN_FALSE;
}
- cmp_len = (php_size_t) (len ? len : MAX(s2->len, (s1->len - offset)));
+ cmp_len = (size_t) (len ? len : MAX(s2->len, (s1->len - offset)));
if (!cs) {
- RETURN_INT(zend_binary_strncmp(s1->val + offset, (s1->len - offset), s2->val, s2->len, cmp_len));
+ RETURN_LONG(zend_binary_strncmp(s1->val + offset, (s1->len - offset), s2->val, s2->len, cmp_len));
} else {
- RETURN_INT(zend_binary_strncasecmp_l(s1->val + offset, (s1->len - offset), s2->val, s2->len, cmp_len));
+ RETURN_LONG(zend_binary_strncasecmp_l(s1->val + offset, (s1->len - offset), s2->val, s2->len, cmp_len));
}
}
/* }}} */