From 1e5a4f281d21abab8101301ea155f9c0394ab02f Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 24 Feb 2014 18:32:09 +0800 Subject: [PATCH] Refactor php_uu(en/de)code to returning zend_string --- ext/standard/php_uuencode.h | 4 ++-- ext/standard/string.c | 16 ++++++------- ext/standard/uuencode.c | 47 ++++++++++++++++++++----------------- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/ext/standard/php_uuencode.h b/ext/standard/php_uuencode.h index 5b2b852606..fedfe660e9 100644 --- a/ext/standard/php_uuencode.h +++ b/ext/standard/php_uuencode.h @@ -24,8 +24,8 @@ PHP_FUNCTION(convert_uudecode); PHP_FUNCTION(convert_uuencode); -PHPAPI int php_uudecode(char *src, int src_len, char **dest); -PHPAPI int php_uuencode(char *src, int src_len, char **dest); +PHPAPI zend_string *php_uudecode(char *src, int src_len); +PHPAPI zend_string *php_uuencode(char *src, int src_len); #endif /* PHP_UUENCODE_H */ diff --git a/ext/standard/string.c b/ext/standard/string.c index be4d874b06..af3c192f10 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1344,15 +1344,15 @@ PHP_FUNCTION(strtoupper) { char *arg; int arglen; + zend_string *result; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arglen) == FAILURE) { return; } - arg = estrndup(arg, arglen); - php_strtoupper(arg, arglen); -//??? RETURN_STRINGL(arg, arglen, 0); - RETURN_STRINGL(arg, arglen); + result = STR_INIT(arg, arglen, 0); + php_strtoupper(result->val, result->len); + RETURN_STR(result); } /* }}} */ @@ -1379,15 +1379,15 @@ PHP_FUNCTION(strtolower) { char *str; int arglen; + zend_string *result; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &arglen) == FAILURE) { return; } - str = estrndup(str, arglen); - php_strtolower(str, arglen); -//??? RETURN_STRINGL(str, arglen, 0); - RETURN_STRINGL(str, arglen); + result = STR_INIT(str, arglen, 0); + php_strtolower(result->val, result->len); + RETURN_STR(result); } /* }}} */ diff --git a/ext/standard/uuencode.c b/ext/standard/uuencode.c index c12c27ec65..2a1de6ed46 100644 --- a/ext/standard/uuencode.c +++ b/ext/standard/uuencode.c @@ -65,13 +65,15 @@ #define PHP_UU_DEC(c) (((c) - ' ') & 077) -PHPAPI int php_uuencode(char *src, int src_len, char **dest) /* {{{ */ +PHPAPI zend_string *php_uuencode(char *src, int src_len) /* {{{ */ { int len = 45; char *p, *s, *e, *ee; + zend_string *dest; /* encoded length is ~ 38% greater than the original */ - p = *dest = safe_emalloc((size_t) ceil(src_len * 1.38), 1, 46); + dest = STR_ALLOC((size_t)ceil(src_len * 1.38) + 46, 0); + p = dest->val; s = src; e = src + src_len; @@ -120,16 +122,19 @@ PHPAPI int php_uuencode(char *src, int src_len, char **dest) /* {{{ */ *p++ = '\n'; *p = '\0'; - return (p - *dest); + dest = STR_REALLOC(dest, p - dest->val, 0); + return dest; } /* }}} */ -PHPAPI int php_uudecode(char *src, int src_len, char **dest) /* {{{ */ +PHPAPI zend_string *php_uudecode(char *src, int src_len) /* {{{ */ { int len, total_len=0; char *s, *e, *p, *ee; + zend_string *dest; - p = *dest = safe_emalloc((size_t) ceil(src_len * 0.75), 1, 1); + dest = STR_ALLOC((size_t) ceil(src_len * 0.75), 0); + p = dest->val; s = src; e = src + src_len; @@ -165,7 +170,7 @@ PHPAPI int php_uudecode(char *src, int src_len, char **dest) /* {{{ */ s++; } - if ((len = total_len > (p - *dest))) { + if ((len = total_len > (p - dest->val))) { *p++ = PHP_UU_DEC(*s) << 2 | PHP_UU_DEC(*(s + 1)) >> 4; if (len > 1) { *p++ = PHP_UU_DEC(*(s + 1)) << 4 | PHP_UU_DEC(*(s + 2)) >> 2; @@ -175,13 +180,15 @@ PHPAPI int php_uudecode(char *src, int src_len, char **dest) /* {{{ */ } } - *(*dest + total_len) = '\0'; + dest->len = total_len; + dest->val[dest->len] = '\0'; - return total_len; + return dest; err: - efree(*dest); - return -1; + STR_FREE(dest); + + return NULL; } /* }}} */ @@ -189,17 +196,14 @@ err: uuencode a string */ PHP_FUNCTION(convert_uuencode) { - char *src, *dst; - int src_len, dst_len; + char *src; + int src_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &src, &src_len) == FAILURE || src_len < 1) { RETURN_FALSE; } - dst_len = php_uuencode(src, src_len, &dst); - -//??? RETURN_STRINGL(dst, dst_len, 0); - RETURN_STRINGL(dst, dst_len); + RETURN_STR(php_uuencode(src, src_len)); } /* }}} */ @@ -207,21 +211,20 @@ PHP_FUNCTION(convert_uuencode) decode a uuencoded string */ PHP_FUNCTION(convert_uudecode) { - char *src, *dst; - int src_len, dst_len; + char *src; + int src_len; + zend_string *dest; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &src, &src_len) == FAILURE || src_len < 1) { RETURN_FALSE; } - dst_len = php_uudecode(src, src_len, &dst); - if (dst_len < 0) { + if ((dest = php_uudecode(src, src_len)) == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The given parameter is not a valid uuencoded string"); RETURN_FALSE; } -//??? RETURN_STRINGL(dst, dst_len, 0); - RETURN_STRINGL(dst, dst_len); + RETURN_STR(dest); } /* }}} */ -- 2.40.0