summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/php_uuencode.h4
-rw-r--r--ext/standard/string.c16
-rw-r--r--ext/standard/uuencode.c47
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);
}
/* }}} */