summaryrefslogtreecommitdiff
path: root/ext/standard/uuencode.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/uuencode.c')
-rw-r--r--ext/standard/uuencode.c47
1 files changed, 25 insertions, 22 deletions
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);
}
/* }}} */