summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_API.h43
-rwxr-xr-xext/pdo/pdo_dbh.c15
-rw-r--r--ext/simplexml/simplexml.c5
-rwxr-xr-xext/spl/spl_functions.c6
-rwxr-xr-xext/spl/spl_sxe.c13
-rw-r--r--ext/sqlite/sqlite.c44
-rw-r--r--ext/standard/array.c24
-rw-r--r--ext/standard/basic_functions.c2
-rw-r--r--ext/standard/image.c26
-rw-r--r--ext/standard/md5.c14
-rw-r--r--ext/standard/string.c12
11 files changed, 67 insertions, 137 deletions
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index 136ed81229..7514df4f03 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -604,6 +604,41 @@ END_EXTERN_C()
(z)->type = IS_STRING; \
}
+#define ZVAL_U_STRING(conv, z, s, duplicate) \
+ if (UG(unicode)) { \
+ UErrorCode status = U_ZERO_ERROR; \
+ UChar *u_str; \
+ int32_t u_len; \
+ uint length = strlen(s); \
+ zend_convert_to_unicode(conv, &u_str, &u_len, s, length, &status); \
+ ZVAL_UNICODEL(z, u_str, u_len, 0); \
+ } else { \
+ char *__s=(s); \
+ (z)->value.str.len = strlen(__s); \
+ (z)->value.str.val = (duplicate?estrndup(__s, (z)->value.str.len):__s); \
+ (z)->type = IS_STRING; \
+ }
+
+#define ZVAL_U_STRINGL(conv, z, s, l, duplicate) \
+ if (UG(unicode)) { \
+ UErrorCode status = U_ZERO_ERROR; \
+ UChar *u_str; \
+ int32_t u_len; \
+ zend_convert_to_unicode(conv, &u_str, &u_len, s, l, &status); \
+ ZVAL_UNICODEL(z, u_str, u_len, 0); \
+ } else { \
+ char *__s=(s); int __l=l; \
+ (z)->value.str.len = __l; \
+ (z)->value.str.val = (duplicate?estrndup(__s, __l):__s); \
+ (z)->type = IS_STRING; \
+ }
+
+#define ZVAL_RT_STRING(z, s, duplicate) \
+ ZVAL_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), z, s, duplicate)
+
+#define ZVAL_RT_STRINGL(z, s, l, duplicate) \
+ ZVAL_U_STRINGL(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), z, s, l, duplicate)
+
#define ZVAL_UNICODE(z, u, duplicate) { \
UChar *__u=(u); \
(z)->value.ustr.len = u_strlen(__u); \
@@ -705,6 +740,10 @@ END_EXTERN_C()
#define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate)
#define RETVAL_ASCII_STRING(s, duplicate) ZVAL_ASCII_STRING(return_value, s, duplicate)
#define RETVAL_ASCII_STRINGL(s, l, duplicate) ZVAL_ASCII_STRINGL(return_value, s, l, duplicate)
+#define RETVAL_U_STRING(conv, s, duplicate) ZVAL_U_STRING(conv, return_value, s, duplicate)
+#define RETVAL_U_STRINGL(conv, s, l, duplicate) ZVAL_U_STRINGL(conv, return_value, s, l, duplicate)
+#define RETVAL_RT_STRING(s, duplicate) ZVAL_RT_STRING(return_value, s, duplicate)
+#define RETVAL_RT_STRINGL(s, l, duplicate) ZVAL_RT_STRINGL(return_value, s, l, duplicate)
#define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value)
#define RETVAL_UNICODE(u, duplicate) ZVAL_UNICODE(return_value, u, duplicate)
#define RETVAL_UNICODEL(u, l, duplicate) ZVAL_UNICODEL(return_value, u, l, duplicate)
@@ -739,6 +778,10 @@ END_EXTERN_C()
#define RETURN_TEXTL(t, l, duplicate) { RETVAL_TEXTL(t, l, duplicate); return; }
#define RETURN_ASCII_STRING(t, duplicate) { RETVAL_ASCII_STRING(t, duplicate); return; }
#define RETURN_ASCII_STRINGL(t, l, duplicate) { RETVAL_ASCII_STRINGL(t, l, duplicate); return; }
+#define RETURN_U_STRING(conv, t, duplicate) { RETVAL_U_STRING(conv, t, duplicate); return; }
+#define RETURN_U_STRINGL(conv, t, l, duplicate) { RETVAL_U_STRINGL(conv, t, l, duplicate); return; }
+#define RETURN_RT_STRING(t, duplicate) { RETVAL_RT_STRING(t, duplicate); return; }
+#define RETURN_RT_STRINGL(t, l, duplicate) { RETVAL_RT_STRINGL(t, l, duplicate); return; }
#define SET_VAR_STRING(n, v) { \
{ \
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index d600c446d9..19407f97a8 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -428,19 +428,8 @@ static void pdo_stmt_construct(pdo_stmt_t *stmt, zval *object, zend_class_entry
zval z_key;
MAKE_STD_ZVAL(query_string);
- if (UG(unicode)) {
- UErrorCode status = U_ZERO_ERROR;
- UChar *u_str;
- int32_t u_len;
-
- zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str, &u_len, stmt->query_string, stmt->query_stringlen, &status);
- ZVAL_UNICODEL(query_string, u_str, u_len, 0);
- u_str = zend_ascii_to_unicode("queryString", sizeof("queryString") ZEND_FILE_LINE_CC);
- ZVAL_UNICODEL(&z_key, u_str, sizeof("queryString")-1, 0);
- } else {
- ZVAL_STRINGL(query_string, stmt->query_string, stmt->query_stringlen, 1);
- ZVAL_STRINGL(&z_key, "queryString", sizeof("queryString")-1, 0);
- }
+ ZVAL_RT_STRINGL(query_string, stmt->query_string, stmt->query_stringlen, 1);
+ ZVAL_ASCII_STRINGL(&z_key, "queryString", sizeof("queryString")-1, 0);
std_object_handlers.write_property(object, &z_key, query_string TSRMLS_CC);
zval_ptr_dtor(&query_string);
if (UG(unicode)) {
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index b509aa934d..0f168af855 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -706,10 +706,7 @@ sxe_properties_get(zval *object TSRMLS_DC)
} else {
if (node->type == XML_TEXT_NODE) {
MAKE_STD_ZVAL(value);
- ZVAL_STRING(value, xmlNodeListGetString(node->doc, node, 1), 1);
- if (UG(unicode)) {
- convert_to_unicode(value);
- }
+ ZVAL_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), value, xmlNodeListGetString(node->doc, node, 1), 1);
zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL);
goto next_iter;
}
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
index 561cd97400..56e0825440 100755
--- a/ext/spl/spl_functions.c
+++ b/ext/spl/spl_functions.c
@@ -119,11 +119,7 @@ void spl_add_class_name(zval *list, zend_class_entry * pce, int allow, int ce_fl
if (zend_u_hash_find(Z_ARRVAL_P(list), ztype, pce->name, len+1, (void*)&tmp) == FAILURE) {
MAKE_STD_ZVAL(tmp);
- if (UG(unicode)) {
- ZVAL_UNICODEL(tmp, (UChar *)pce->name, pce->name_length, 1);
- } else {
- ZVAL_STRINGL(tmp, pce->name, pce->name_length, 1);
- }
+ ZVAL_TEXTL(tmp, pce->name, pce->name_length, 1);
zend_u_hash_add(Z_ARRVAL_P(list), ztype, pce->name, len+1, &tmp, sizeof(zval *), NULL);
}
}
diff --git a/ext/spl/spl_sxe.c b/ext/spl/spl_sxe.c
index aedad3dc43..4120f640aa 100755
--- a/ext/spl/spl_sxe.c
+++ b/ext/spl/spl_sxe.c
@@ -80,19 +80,10 @@ SPL_METHOD(SimpleXMLIterator, key) /* {{{ */
intern = (php_sxe_object *)zend_object_store_get_object(sxe->iter.data TSRMLS_CC);
if (intern != NULL && intern->node != NULL) {
curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->node)->node;
- if (UG(unicode)) {
- UErrorCode status = U_ZERO_ERROR;
- UChar *u_str;
- int32_t u_len;
-
- zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str, &u_len, (char*)curnode->name, xmlStrlen(curnode->name), &status);
- RETURN_UNICODEL(u_str, u_len, 0);
- } else {
- RETURN_STRINGL((char*)curnode->name, xmlStrlen(curnode->name), 1);
- }
+ RETURN_U_STRINGL(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), (char*)curnode->name, xmlStrlen(curnode->name), 1);
}
- RETURN_FALSE;
+ RETURN_FALSE;
}
/* }}} */
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c
index bbd0ccfe8b..a51a3d87f8 100644
--- a/ext/sqlite/sqlite.c
+++ b/ext/sqlite/sqlite.c
@@ -1917,11 +1917,7 @@ static void php_sqlite_fetch_column(struct php_sqlite_result *res, zval *which,
char *decoded = emalloc(l);
l = php_sqlite_decode_binary(rowdata[j]+1, decoded);
decoded[l] = '\0';
- if (UG(unicode)) {
- RETVAL_BINARYL(decoded, l, 0);
- } else {
- RETVAL_STRINGL(decoded, l, 0);
- }
+ RETVAL_BINARYL(decoded, l, 0);
if (!res->buffered) {
efree((char*)rowdata[j]);
rowdata[j] = NULL;
@@ -2444,13 +2440,7 @@ PHP_FUNCTION(sqlite_libversion)
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
- if (UG(unicode)) {
- char *temp = (char*)sqlite_libversion();
- UChar *u_temp = zend_ascii_to_unicode(temp, strlen(temp)+1 ZEND_FILE_LINE_CC);
- RETURN_UNICODE(u_temp, 0);
- } else {
- RETURN_STRING((char*)sqlite_libversion(), 1);
- }
+ RETURN_ASCII_STRING((char*)sqlite_libversion(), 1);
}
/* }}} */
@@ -2461,13 +2451,7 @@ PHP_FUNCTION(sqlite_libencoding)
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
- if (UG(unicode)) {
- char *temp = (char*)sqlite_libencoding();
- UChar *u_temp = zend_ascii_to_unicode(temp, strlen(temp)+1 ZEND_FILE_LINE_CC);
- RETURN_UNICODE(u_temp, 0);
- } else {
- RETURN_STRING((char*)sqlite_libencoding(), 1);
- }
+ RETURN_ASCII_STRING((char*)sqlite_libencoding(), 1);
}
/* }}} */
@@ -2664,16 +2648,7 @@ PHP_FUNCTION(sqlite_field_name)
RETURN_FALSE;
}
- if (UG(unicode)) {
- UErrorCode status = U_ZERO_ERROR;
- UChar *u_str;
- int32_t u_len;
-
- zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str, &u_len, res->col_names[field], strlen(res->col_names[field]), &status);
- RETURN_UNICODEL(u_str, u_len, 0);
- } else {
- RETURN_STRING(res->col_names[field], 1);
- }
+ RETURN_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), res->col_names[field], 1);
}
/* }}} */
@@ -2914,16 +2889,7 @@ PHP_FUNCTION(sqlite_error_string)
msg = sqlite_error_string(code);
if (msg) {
- if (UG(unicode)) {
- UErrorCode status = U_ZERO_ERROR;
- UChar *u_str;
- int32_t u_len;
-
- zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str, &u_len, msg, strlen(msg), &status);
- RETURN_UNICODEL(u_str, u_len, 0);
- } else {
- RETURN_STRING((char*)msg, 1);
- }
+ RETURN_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), (char*)msg, 1);
} else {
RETURN_NULL();
}
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 10e181c291..cb321c9c14 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1461,11 +1461,7 @@ PHP_FUNCTION(extract)
/* break omitted intentionally */
case EXTR_OVERWRITE:
- if (UG(unicode)) {
- ZVAL_UNICODEL(&final_name, var_name, var_name_len, 1);
- } else {
- ZVAL_STRINGL(&final_name, var_name, var_name_len, 1);
- }
+ ZVAL_TEXTL(&final_name, var_name, var_name_len, 1);
break;
case EXTR_PREFIX_IF_EXISTS:
@@ -1489,11 +1485,7 @@ PHP_FUNCTION(extract)
case EXTR_PREFIX_SAME:
if (!var_exists) {
- if (UG(unicode)) {
- ZVAL_UNICODEL(&final_name, var_name, var_name_len, 1);
- } else {
- ZVAL_STRINGL(&final_name, var_name, var_name_len, 1);
- }
+ ZVAL_TEXTL(&final_name, var_name, var_name_len, 1);
}
/* break omitted intentionally */
@@ -1534,22 +1526,14 @@ PHP_FUNCTION(extract)
memcpy(Z_STRVAL(final_name)+Z_STRLEN_PP(prefix)+1, var_name, var_name_len+1);
}
} else {
- if (UG(unicode)) {
- ZVAL_UNICODEL(&final_name, var_name, var_name_len, 1);
- } else {
- ZVAL_STRINGL(&final_name, var_name, var_name_len, 1);
- }
+ ZVAL_TEXTL(&final_name, var_name, var_name_len, 1);
}
}
break;
default:
if (!var_exists) {
- if (UG(unicode)) {
- ZVAL_UNICODEL(&final_name, var_name, var_name_len, 1);
- } else {
- ZVAL_STRINGL(&final_name, var_name, var_name_len, 1);
- }
+ ZVAL_TEXTL(&final_name, var_name, var_name_len, 1);
}
break;
}
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index f4f59c6d56..d8fab087d8 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -1691,7 +1691,7 @@ PHP_FUNCTION(getopt)
MAKE_STD_ZVAL(val);
if (optarg != NULL) {
- ZVAL_STRING(val, optarg, 1);
+ ZVAL_RT_STRING(val, optarg, 1);
} else {
ZVAL_FALSE(val);
}
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 3cc4a0e8b6..52f03b5698 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -1128,12 +1128,7 @@ PHP_FUNCTION(image_type_to_mime_type)
}
convert_to_long_ex(p_image_type);
temp = (char*)php_image_type_to_mime_type(Z_LVAL_PP(p_image_type));
- if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(temp, strlen(temp)+1 ZEND_FILE_LINE_CC);
- ZVAL_UNICODE(return_value, u_temp, 0);
- } else {
- ZVAL_STRING(return_value, temp, 1);
- }
+ ZVAL_ASCII_STRING(return_value, temp, 1);
}
/* }}} */
@@ -1177,12 +1172,7 @@ PHP_FUNCTION(image_type_to_extension)
temp = ".xbm";
}
if (temp) {
- if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(temp + !inc_dot, strlen(temp)+inc_dot ZEND_FILE_LINE_CC);
- RETURN_UNICODE(u_temp, 0);
- } else {
- RETURN_STRING(temp + !inc_dot, 1);
- }
+ RETURN_ASCII_STRING(temp + !inc_dot, 1);
}
RETURN_FALSE;
@@ -1373,12 +1363,9 @@ PHP_FUNCTION(getimagesize)
add_index_long(return_value, 1, result->height);
add_index_long(return_value, 2, itype);
spprintf(&temp, 0, "width=\"%d\" height=\"%d\"", result->width, result->height);
+ add_index_ascii_string(return_value, 3, temp, 0);
if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(temp, strlen(temp)+1 ZEND_FILE_LINE_CC);
- add_index_unicode(return_value, 3, u_temp, 0);
efree(temp);
- } else {
- add_index_string(return_value, 3, temp, 0);
}
if (result->bits != 0) {
@@ -1388,12 +1375,7 @@ PHP_FUNCTION(getimagesize)
add_assoc_long(return_value, "channels", result->channels);
}
temp = (char*)php_image_type_to_mime_type(itype);
- if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(temp, strlen(temp)+1 ZEND_FILE_LINE_CC);
- add_assoc_unicode(return_value, "mime", u_temp, 0);
- } else {
- add_assoc_string(return_value, "mime", temp, 1);
- }
+ add_assoc_ascii_string(return_value, "mime", temp, 1);
efree(result);
} else {
RETURN_FALSE;
diff --git a/ext/standard/md5.c b/ext/standard/md5.c
index 2a33588774..3f8a4f7aa4 100644
--- a/ext/standard/md5.c
+++ b/ext/standard/md5.c
@@ -61,12 +61,7 @@ PHP_NAMED_FUNCTION(php_if_md5)
RETURN_BINARYL(digest, 16, 1);
} else {
make_digest(md5str, digest);
- if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(md5str, 33 ZEND_FILE_LINE_CC);
- RETVAL_UNICODE(u_temp, 0);
- } else {
- RETVAL_STRING(md5str, 1);
- }
+ RETVAL_ASCII_STRING(md5str, 1);
}
}
@@ -113,12 +108,7 @@ PHP_NAMED_FUNCTION(php_if_md5_file)
RETURN_BINARYL(digest, 16, 1);
} else {
make_digest(md5str, digest);
- if (UG(unicode)) {
- UChar *u_temp = zend_ascii_to_unicode(md5str, 33 ZEND_FILE_LINE_CC);
- RETVAL_UNICODE(u_temp, 0);
- } else {
- RETVAL_STRING(md5str, 1);
- }
+ RETVAL_ASCII_STRING(md5str, 1);
}
}
/* }}} */
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 66485824c8..eaf37fd207 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1459,11 +1459,7 @@ PHP_FUNCTION(strtoupper)
WRONG_PARAM_COUNT;
}
if (Z_TYPE_PP(arg) != IS_STRING && Z_TYPE_PP(arg) != IS_UNICODE) {
- if (UG(unicode)) {
- convert_to_unicode_ex(arg);
- } else {
- convert_to_string_ex(arg);
- }
+ convert_to_text_ex(arg);
}
RETVAL_ZVAL(*arg, 1, 0);
@@ -1532,11 +1528,7 @@ PHP_FUNCTION(strtolower)
WRONG_PARAM_COUNT;
}
if (Z_TYPE_PP(str) != IS_STRING && Z_TYPE_PP(str) != IS_UNICODE) {
- if (UG(unicode)) {
- convert_to_unicode_ex(str);
- } else {
- convert_to_string_ex(str);
- }
+ convert_to_text_ex(str);
}
RETVAL_ZVAL(*str, 1, 0);