]> granicus.if.org Git - php/commitdiff
Refactor php_uu(en/de)code to returning zend_string
authorXinchen Hui <laruence@gmail.com>
Mon, 24 Feb 2014 10:32:09 +0000 (18:32 +0800)
committerXinchen Hui <laruence@gmail.com>
Mon, 24 Feb 2014 10:32:09 +0000 (18:32 +0800)
ext/standard/php_uuencode.h
ext/standard/string.c
ext/standard/uuencode.c

index 5b2b85260603a34ea12a2ea236af687e0c215e0c..fedfe660e99190e0f4131a43eadaa12062b47251 100644 (file)
@@ -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 */
 
index be4d874b0674384951045d417bb3504fb19e387b..af3c192f10bcd628aa43bb775f843a220d32aac2 100644 (file)
@@ -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);
 }
 /* }}} */
 
index c12c27ec65a9b403f2b91093854d36bcd6bc0322..2a1de6ed46455ca653f6077e87933ee8573749ba 100644 (file)
 
 #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);
 }
 /* }}} */