size_t result;
typedef unsigned int ucs4_t;
- in_size = in_len;
+ *out = NULL;
+ *out_len = 0;
/*
This is not the right way to get output size...
*/
out_size = in_len * sizeof(ucs4_t) + 15;
out_left = out_size;
-
+
+ in_size = in_len;
+
cd = icv_open(out_charset, in_charset);
if (cd == (iconv_t)(-1)) {
- *out = NULL;
- *out_len = 0;
return PHP_ICONV_ERR_UNKNOWN;
}
out_buffer = (char *) emalloc(out_size + 1);
- *out = out_buffer;
out_p = out_buffer;
result = icv(cd, (const char **) &in_p, &in_size, (char **)
if (result == (size_t)(-1)) {
efree(out_buffer);
- *out = NULL;
- *out_len = 0;
return PHP_ICONV_ERR_UNKNOWN;
}
*out_len = out_size - out_left;
out_buffer[*out_len] = '\0';
+ *out = out_buffer;
+
icv_close(cd);
-
+
return PHP_ICONV_ERR_SUCCESS;
#else
size_t bsz, result = 0;
php_iconv_err_t retval = PHP_ICONV_ERR_SUCCESS;
+ *out = NULL;
+ *out_len = 0;
+
cd = icv_open(out_charset, in_charset);
if (cd == (iconv_t)(-1)) {
if (errno == EINVAL) {
- *out = NULL;
return PHP_ICONV_ERR_WRONG_CHARSET;
} else {
- *out = NULL;
return PHP_ICONV_ERR_CONVERTER;
}
}
/* other error */
retval = PHP_ICONV_ERR_UNKNOWN;
efree(out_buf);
- *out = NULL;
- *out_len = 0;
return PHP_ICONV_ERR_UNKNOWN;
}
}