dmitry Tue Aug 23 08:53:32 2005 EDT
Modified files:
/php-src unicode-progress.txt
/ZendEngine2 zend_API.c zend_API.h zend_builtin_functions.c
zend_exceptions.c
/php-src/ext/standard dir.c dns.c filestat.c info.c link.c string.c
type.c uniqid.c
/php-src/ext/standard/tests/file userdirstream.phpt
/php-src/ext/standard/tests/strings bug24098.phpt
/php-src/tests/reflection parameters_001.phpt
Log:
Unicode support
http://cvs.php.net/diff.php/php-src/unicode-progress.txt?r1=1.5&r2=1.6&ty=u
Index: php-src/unicode-progress.txt
diff -u php-src/unicode-progress.txt:1.5 php-src/unicode-progress.txt:1.6
--- php-src/unicode-progress.txt:1.5 Tue Aug 23 02:51:11 2005
+++ php-src/unicode-progress.txt Tue Aug 23 08:53:15 2005
@@ -22,9 +22,6 @@
--
Status: In Progress
debug_backtrace()
- extension_loaded()
- get_extension_funcs()
- get_included_files()
Completed:
class_exists()
create_function()
@@ -33,6 +30,7 @@
defined()
each()
error_reporting()
+ extension_loaded()
func_get_arg()
func_get_args()
func_num_args()
@@ -45,6 +43,8 @@
get_defined_constants()
get_defined_functions()
get_defined_vars()
+ get_extension_funcs()
+ get_included_files()
get_loaded_extensions()
get_object_vars()
get_parent_class()
http://cvs.php.net/diff.php/ZendEngine2/zend_API.c?r1=1.312&r2=1.313&ty=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.312 ZendEngine2/zend_API.c:1.313
--- ZendEngine2/zend_API.c:1.312 Mon Aug 22 13:48:17 2005
+++ ZendEngine2/zend_API.c Tue Aug 23 08:53:19 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.c,v 1.312 2005/08/22 17:48:17 andrei Exp $ */
+/* $Id: zend_API.c,v 1.313 2005/08/23 12:53:19 dmitry Exp $ */
#include "zend.h"
#include "zend_execute.h"
@@ -1711,6 +1711,66 @@
return SUCCESS;
}
+ZEND_API int add_property_ascii_string_ex(zval *arg, char *key, uint key_len,
char *str, int duplicate TSRMLS_DC)
+{
+ zval *tmp;
+ zval z_key;
+
+ MAKE_STD_ZVAL(tmp);
+ ZVAL_ASCII_STRING(tmp, str, duplicate);
+
+ ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+
+ Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+ zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+ return SUCCESS;
+}
+
+ZEND_API int add_property_ascii_stringl_ex(zval *arg, char *key, uint key_len,
char *str, uint length, int duplicate TSRMLS_DC)
+{
+ zval *tmp;
+ zval z_key;
+
+ MAKE_STD_ZVAL(tmp);
+ ZVAL_ASCII_STRINGL(tmp, str, length, duplicate);
+
+ ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+
+ Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+ zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+ return SUCCESS;
+}
+
+ZEND_API int add_property_rt_string_ex(zval *arg, char *key, uint key_len,
char *str, int duplicate TSRMLS_DC)
+{
+ zval *tmp;
+ zval z_key;
+
+ MAKE_STD_ZVAL(tmp);
+ ZVAL_RT_STRING(tmp, str, duplicate);
+
+ ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+
+ Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+ zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+ return SUCCESS;
+}
+
+ZEND_API int add_property_rt_stringl_ex(zval *arg, char *key, uint key_len,
char *str, uint length, int duplicate TSRMLS_DC)
+{
+ zval *tmp;
+ zval z_key;
+
+ MAKE_STD_ZVAL(tmp);
+ ZVAL_RT_STRINGL(tmp, str, length, duplicate);
+
+ ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+
+ Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+ zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+ return SUCCESS;
+}
+
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval
*value TSRMLS_DC)
{
zval z_key;
@@ -2937,6 +2997,50 @@
zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
}
+ZEND_API void zend_update_property_ascii_string(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value TSRMLS_DC)
+{
+ zval *tmp;
+
+ ALLOC_ZVAL(tmp);
+ tmp->is_ref = 0;
+ tmp->refcount = 0;
+ ZVAL_ASCII_STRING(tmp, value, 1);
+ zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
+}
+
+ZEND_API void zend_update_property_ascii_stringl(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value, int value_len TSRMLS_DC)
+{
+ zval *tmp;
+
+ ALLOC_ZVAL(tmp);
+ tmp->is_ref = 0;
+ tmp->refcount = 0;
+ ZVAL_ASCII_STRINGL(tmp, value, value_len, 1);
+ zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
+}
+
+ZEND_API void zend_update_property_rt_string(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value TSRMLS_DC)
+{
+ zval *tmp;
+
+ ALLOC_ZVAL(tmp);
+ tmp->is_ref = 0;
+ tmp->refcount = 0;
+ ZVAL_RT_STRING(tmp, value, 1);
+ zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
+}
+
+ZEND_API void zend_update_property_rt_stringl(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value, int value_len TSRMLS_DC)
+{
+ zval *tmp;
+
+ ALLOC_ZVAL(tmp);
+ tmp->is_ref = 0;
+ tmp->refcount = 0;
+ ZVAL_RT_STRINGL(tmp, value, value_len, 1);
+ zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
+}
+
ZEND_API void zend_update_property_unicode(zend_class_entry *scope, zval
*object, char *name, int name_length, UChar *value TSRMLS_DC)
{
zval *tmp;
http://cvs.php.net/diff.php/ZendEngine2/zend_API.h?r1=1.218&r2=1.219&ty=u
Index: ZendEngine2/zend_API.h
diff -u ZendEngine2/zend_API.h:1.218 ZendEngine2/zend_API.h:1.219
--- ZendEngine2/zend_API.h:1.218 Tue Aug 23 05:33:43 2005
+++ ZendEngine2/zend_API.h Tue Aug 23 08:53:19 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.h,v 1.218 2005/08/23 09:33:43 dmitry Exp $ */
+/* $Id: zend_API.h,v 1.219 2005/08/23 12:53:19 dmitry Exp $ */
#ifndef ZEND_API_H
#define ZEND_API_H
@@ -228,6 +228,10 @@
ZEND_API void zend_update_property_double(zend_class_entry *scope, zval
*object, char *name, int name_length, double value TSRMLS_DC);
ZEND_API void zend_update_property_string(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value TSRMLS_DC);
ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value, int value_length TSRMLS_DC);
+ZEND_API void zend_update_property_ascii_string(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value TSRMLS_DC);
+ZEND_API void zend_update_property_ascii_stringl(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value, int value_length TSRMLS_DC);
+ZEND_API void zend_update_property_rt_string(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value TSRMLS_DC);
+ZEND_API void zend_update_property_rt_stringl(zend_class_entry *scope, zval
*object, char *name, int name_length, char *value, int value_length TSRMLS_DC);
ZEND_API void zend_update_property_unicode(zend_class_entry *scope, zval
*object, char *name, int name_length, UChar *value TSRMLS_DC);
ZEND_API void zend_update_property_unicodel(zend_class_entry *scope, zval
*object, char *name, int name_length, UChar *value, int value_length TSRMLS_DC);
@@ -306,6 +310,29 @@
add_assoc_stringl_ex(arg, key, key_len, (char*)(str), length,
duplicate); \
}
+#define add_assoc_rt_string_ex(arg, key, key_len, str, duplicate) \
+ if (UG(unicode)) { \
+ UErrorCode status = U_ZERO_ERROR; \
+ UChar *u_str; \
+ int32_t u_len; \
+ int length = strlen(str); \
+
zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str,
&u_len, str, length, &status); \
+ add_assoc_unicodel_ex(arg, key, key_len, u_str, u_len, 0); \
+ } else { \
+ add_assoc_string_ex(arg, key, key_len, (char*)(str),
duplicate); \
+ }
+
+#define add_assoc_rt_stringl_ex(arg, key, key_len, str, length, duplicate) \
+ 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, str, length, &status); \
+ add_assoc_unicodel_ex(arg, key, key_len, u_str, u_len, 0); \
+ } else { \
+ add_assoc_stringl_ex(arg, key, key_len, (char*)(str), length,
duplicate); \
+ }
+
#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key,
strlen(__key)+1, __n)
#define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key,
strlen(__key) + 1)
#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key,
strlen(__key)+1, __b)
@@ -316,6 +343,8 @@
#define add_assoc_unicode(__arg, __key, __str, __duplicate)
add_assoc_unicode_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
#define add_assoc_unicodel(__arg, __key, __str, __length, __duplicate)
add_assoc_unicodel_ex(__arg, __key, strlen(__key)+1, __str, __length,
__duplicate)
#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key,
strlen(__key)+1, __value)
+#define add_assoc_rt_string(__arg, __key, __str, __duplicate)
add_assoc_rt_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
+#define add_assoc_rt_stringl(__arg, __key, __str, __length, __duplicate)
add_assoc_rt_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length,
__duplicate)
#define add_assoc_text(arg, key, str, duplicate) \
if (UG(unicode)) { \
@@ -446,6 +475,29 @@
add_next_index_stringl(arg, (char*)(str), length, duplicate); \
}
+#define add_next_index_rt_string(arg, str, duplicate) \
+ if (UG(unicode)) { \
+ UErrorCode status = U_ZERO_ERROR; \
+ UChar *u_str; \
+ int32_t u_len; \
+ int length = strlen(str); \
+
zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &u_str,
&u_len, str, length, &status); \
+ add_next_index_unicodel(arg, u_str, u_len, 0); \
+ } else { \
+ add_next_index_string(arg, (char*)(str), duplicate); \
+ }
+
+#define add_next_index_rt_stringl(arg, str, length, duplicate) \
+ 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, str, length, &status); \
+ add_next_index_unicodel(arg, u_str, u_len, 0); \
+ } else { \
+ add_next_index_stringl(arg, (char*)(str), length, duplicate); \
+ }
+
ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char
*str, void **dest, int duplicate);
ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char
*str, uint length, void **dest, int duplicate);
@@ -469,6 +521,10 @@
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char
*str, int duplicate TSRMLS_DC);
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char
*str, uint length, int duplicate TSRMLS_DC);
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval
*value TSRMLS_DC);
+ZEND_API int add_property_ascii_string_ex(zval *arg, char *key, uint key_len,
char *str, int duplicate TSRMLS_DC);
+ZEND_API int add_property_ascii_stringl_ex(zval *arg, char *key, uint key_len,
char *str, uint length, int duplicate TSRMLS_DC);
+ZEND_API int add_property_rt_string_ex(zval *arg, char *key, uint key_len,
char *str, int duplicate TSRMLS_DC);
+ZEND_API int add_property_rt_stringl_ex(zval *arg, char *key, uint key_len,
char *str, uint length, int duplicate TSRMLS_DC);
#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg,
__key, strlen(__key)+1, __n TSRMLS_CC)
#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key,
strlen(__key) + 1 TSRMLS_CC)
@@ -477,6 +533,10 @@
#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg,
__key, strlen(__key)+1, __d TSRMLS_CC)
#define add_property_string(__arg, __key, __str, __duplicate)
add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate
TSRMLS_CC)
#define add_property_stringl(__arg, __key, __str, __length, __duplicate)
add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length,
__duplicate TSRMLS_CC)
+#define add_property_ascii_string(__arg, __key, __str, __duplicate)
add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate
TSRMLS_CC)
+#define add_property_ascii_stringl(__arg, __key, __str, __length, __duplicate)
add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length,
__duplicate TSRMLS_CC)
+#define add_property_rt_string(__arg, __key, __str, __duplicate)
add_property_ascii_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate
TSRMLS_CC)
+#define add_property_rt_stringl(__arg, __key, __str, __length, __duplicate)
add_property_rt_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length,
__duplicate TSRMLS_CC)
#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg,
__key, strlen(__key)+1, __value TSRMLS_CC)
http://cvs.php.net/diff.php/ZendEngine2/zend_builtin_functions.c?r1=1.289&r2=1.290&ty=u
Index: ZendEngine2/zend_builtin_functions.c
diff -u ZendEngine2/zend_builtin_functions.c:1.289
ZendEngine2/zend_builtin_functions.c:1.290
--- ZendEngine2/zend_builtin_functions.c:1.289 Tue Aug 23 03:23:29 2005
+++ ZendEngine2/zend_builtin_functions.c Tue Aug 23 08:53:20 2005
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_builtin_functions.c,v 1.289 2005/08/23 07:23:29 dmitry Exp $ */
+/* $Id: zend_builtin_functions.c,v 1.290 2005/08/23 12:53:20 dmitry Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -1158,8 +1158,8 @@
array_init(return_value);
zend_hash_internal_pointer_reset(&EG(included_files));
- while (zend_hash_get_current_key(&EG(included_files), &entry, NULL, 1)
== HASH_KEY_IS_STRING) {
- add_next_index_string(return_value, entry, 0);
+ while (zend_hash_get_current_key(&EG(included_files), &entry, NULL, 0)
== HASH_KEY_IS_STRING) {
+ add_next_index_rt_string(return_value, entry, 1);
zend_hash_move_forward(&EG(included_files));
}
}
@@ -1979,7 +1979,7 @@
if (skip->op_array) {
filename = skip->op_array->filename;
lineno = skip->opline->lineno;
- add_assoc_string_ex(stack_frame, "file",
sizeof("file"), filename, 1);
+ add_assoc_rt_string_ex(stack_frame, "file",
sizeof("file"), filename, 1);
add_assoc_long_ex(stack_frame, "line", sizeof("line"),
lineno);
/* try to fetch args only if an FCALL was just made -
elsewise we're in the middle of a function
@@ -2060,7 +2060,7 @@
if we have called include in the frame above
- this is the file we have included.
*/
- add_next_index_string(arg_array,
include_filename, 1);
+ add_next_index_rt_string(arg_array,
include_filename, 1);
add_assoc_zval_ex(stack_frame, "args",
sizeof("args"), arg_array);
}
http://cvs.php.net/diff.php/ZendEngine2/zend_exceptions.c?r1=1.88&r2=1.89&ty=u
Index: ZendEngine2/zend_exceptions.c
diff -u ZendEngine2/zend_exceptions.c:1.88 ZendEngine2/zend_exceptions.c:1.89
--- ZendEngine2/zend_exceptions.c:1.88 Fri Aug 19 09:20:14 2005
+++ ZendEngine2/zend_exceptions.c Tue Aug 23 08:53:21 2005
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_exceptions.c,v 1.88 2005/08/19 13:20:14 dmitry Exp $ */
+/* $Id: zend_exceptions.c,v 1.89 2005/08/23 12:53:21 dmitry Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -94,7 +94,7 @@
trace->refcount = 0;
zend_fetch_debug_backtrace(trace, skip_top_traces TSRMLS_CC);
- zend_update_property_string(U_CLASS_ENTRY(default_exception_ce), &obj,
"file", sizeof("file")-1, zend_get_executed_filename(TSRMLS_C) TSRMLS_CC);
+ zend_update_property_rt_string(U_CLASS_ENTRY(default_exception_ce),
&obj, "file", sizeof("file")-1, zend_get_executed_filename(TSRMLS_C) TSRMLS_CC);
zend_update_property_long(U_CLASS_ENTRY(default_exception_ce), &obj,
"line", sizeof("line")-1, zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
zend_update_property(U_CLASS_ENTRY(default_exception_ce), &obj,
"trace", sizeof("trace")-1, trace TSRMLS_CC);
@@ -141,6 +141,14 @@
if (message) {
if (message_type == IS_UNICODE) {
zend_update_property_unicodel(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, message, message_len TSRMLS_CC);
+ } else 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, message, message_len, &status);
+
zend_update_property_unicodel(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, u_str, u_len TSRMLS_CC);
+ efree(u_str);
} else {
zend_update_property_stringl(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, message, message_len TSRMLS_CC);
}
@@ -172,6 +180,14 @@
if (message) {
if (message_type == IS_UNICODE) {
zend_update_property_unicodel(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, message, message_len TSRMLS_CC);
+ } else 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, message, message_len, &status);
+
zend_update_property_unicodel(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, u_str, u_len TSRMLS_CC);
+ efree(u_str);
} else {
zend_update_property_stringl(U_CLASS_ENTRY(default_exception_ce), object,
"message", sizeof("message")-1, message, message_len TSRMLS_CC);
}
@@ -286,12 +302,23 @@
#define TRACE_APPEND_STRL(val, vallen) \
{ \
- int l = vallen; \
+ int l = vallen;
\
*str = (char*)erealloc(*str, *len + l + 1);
\
memcpy((*str) + *len, val, l);
\
*len += l;
\
}
+#define TRACE_APPEND_ZVAL(zv) \
+ if (Z_TYPE_P((zv)) == IS_UNICODE) { \
+ zval copy; \
+ int use_copy; \
+ zend_make_printable_zval((zv), ©, &use_copy); \
+ TRACE_APPEND_STRL(Z_STRVAL(copy), Z_STRLEN(copy)); \
+ zval_dtor(©); \
+ } else { \
+ TRACE_APPEND_STRL(Z_STRVAL_P((zv)), Z_STRLEN_P((zv))); \
+ }
+
#define TRACE_APPEND_STR(val) \
TRACE_APPEND_STRL(val, sizeof(val)-1)
@@ -436,8 +463,9 @@
} else {
line = 0;
}
- s_tmp = emalloc(Z_STRLEN_PP(file) + MAX_LENGTH_OF_LONG + 2 + 1);
- sprintf(s_tmp, "%s(%ld): ", Z_STRVAL_PP(file), line);
+ TRACE_APPEND_ZVAL(*file);
+ s_tmp = emalloc(MAX_LENGTH_OF_LONG + 2 + 1);
+ sprintf(s_tmp, "(%ld): ", line);
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
efree(s_tmp);
} else {
@@ -646,7 +674,7 @@
if (message) {
-
zend_update_property_string(U_CLASS_ENTRY(default_exception_ce), ex, "message",
sizeof("message")-1, message TSRMLS_CC);
+
zend_update_property_rt_string(U_CLASS_ENTRY(default_exception_ce), ex,
"message", sizeof("message")-1, message TSRMLS_CC);
}
if (code) {
zend_update_property_long(U_CLASS_ENTRY(default_exception_ce),
ex, "code", sizeof("code")-1, code TSRMLS_CC);
@@ -723,7 +751,15 @@
file = zend_read_property(U_CLASS_ENTRY(default_exception_ce),
exception, "file", sizeof("file")-1, 1 TSRMLS_CC);
line = zend_read_property(U_CLASS_ENTRY(default_exception_ce),
exception, "line", sizeof("line")-1, 1 TSRMLS_CC);
- zend_error_va(E_ERROR, Z_STRVAL_P(file), Z_LVAL_P(line),
"Uncaught %R\n thrown", Z_TYPE_P(str), Z_UNIVAL_P(str));
+ if (Z_TYPE_P(file) == IS_UNICODE) {
+ zval copy;
+ int use_copy;
+ zend_make_printable_zval(file, ©, &use_copy);
+ zend_error_va(E_ERROR, Z_STRVAL(copy), Z_LVAL_P(line),
"Uncaught %R\n thrown", Z_TYPE_P(str), Z_UNIVAL_P(str));
+ zval_dtor(©);
+ } else {
+ zend_error_va(E_ERROR, Z_STRVAL_P(file),
Z_LVAL_P(line), "Uncaught %R\n thrown", Z_TYPE_P(str), Z_UNIVAL_P(str));
+ }
} else {
zend_error(E_ERROR, "Uncaught exception '%v'",
ce_exception->name);
}
http://cvs.php.net/diff.php/php-src/ext/standard/dir.c?r1=1.147&r2=1.148&ty=u
Index: php-src/ext/standard/dir.c
diff -u php-src/ext/standard/dir.c:1.147 php-src/ext/standard/dir.c:1.148
--- php-src/ext/standard/dir.c:1.147 Wed Aug 3 10:07:58 2005
+++ php-src/ext/standard/dir.c Tue Aug 23 08:53:22 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dir.c,v 1.147 2005/08/03 14:07:58 sniper Exp $ */
+/* $Id: dir.c,v 1.148 2005/08/23 12:53:22 dmitry Exp $ */
/* {{{ includes/startup/misc */
@@ -201,8 +201,8 @@
php_set_default_dir(dirp->rsrc_id TSRMLS_CC);
if (createobject) {
- object_init_ex(return_value, dir_class_entry_ptr);
- add_property_stringl(return_value, "path", dirname, dir_len, 1);
+ object_init_ex(return_value,
U_CLASS_ENTRY(dir_class_entry_ptr));
+ add_property_rt_stringl(return_value, "path", dirname, dir_len,
1);
add_property_resource(return_value, "handle", dirp->rsrc_id);
php_stream_auto_cleanup(dirp); /* so we don't get warnings
under debug */
} else {
@@ -318,7 +318,7 @@
#endif
if (ret) {
- RETURN_STRING(path, 1);
+ RETURN_RT_STRING(path, 1);
} else {
RETURN_FALSE;
}
@@ -349,7 +349,7 @@
FETCH_DIRP();
if (php_stream_readdir(dirp, &entry)) {
- RETURN_STRINGL(entry.d_name, strlen(entry.d_name), 1);
+ RETURN_RT_STRINGL(entry.d_name, strlen(entry.d_name), 1);
}
RETURN_FALSE;
}
@@ -450,7 +450,7 @@
continue;
}
}
- add_next_index_string(return_value,
globbuf.gl_pathv[n]+cwd_skip, 1);
+ add_next_index_rt_string(return_value,
globbuf.gl_pathv[n]+cwd_skip, 1);
}
globfree(&globbuf);
@@ -491,7 +491,10 @@
array_init(return_value);
for (i = 0; i < n; i++) {
- add_next_index_string(return_value, namelist[i], 0);
+ add_next_index_rt_string(return_value, namelist[i], 0);
+ if (UG(unicode)) {
+ efree(namelist[i]);
+ }
}
if (n) {
http://cvs.php.net/diff.php/php-src/ext/standard/dns.c?r1=1.70&r2=1.71&ty=u
Index: php-src/ext/standard/dns.c
diff -u php-src/ext/standard/dns.c:1.70 php-src/ext/standard/dns.c:1.71
--- php-src/ext/standard/dns.c:1.70 Wed Aug 3 10:07:58 2005
+++ php-src/ext/standard/dns.c Tue Aug 23 08:53:22 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dns.c,v 1.70 2005/08/03 14:07:58 sniper Exp $ */
+/* $Id: dns.c,v 1.71 2005/08/23 12:53:22 dmitry Exp $ */
/* {{{ includes */
#include "php.h"
@@ -142,7 +142,10 @@
#endif
RETVAL_FALSE;
} else {
- RETVAL_STRING(addr, 0);
+ RETVAL_RT_STRING(addr, 0);
+ if (UG(unicode)) {
+ efree(addr);
+ }
}
}
/* }}} */
@@ -187,6 +190,7 @@
PHP_FUNCTION(gethostbyname)
{
zval **arg;
+ char *tmp;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
{
ZEND_WRONG_PARAM_COUNT();
@@ -194,7 +198,11 @@
convert_to_string_ex(arg);
- RETVAL_STRING(php_gethostbyname(Z_STRVAL_PP(arg)), 0);
+ tmp = php_gethostbyname(Z_STRVAL_PP(arg));
+ RETVAL_RT_STRING(tmp, 0);
+ if (UG(unicode)) {
+ efree(tmp);
+ }
}
/* }}} */
@@ -221,7 +229,7 @@
for (i = 0 ; hp->h_addr_list[i] != 0 ; i++) {
in = *(struct in_addr *) hp->h_addr_list[i];
- add_next_index_string(return_value, inet_ntoa(in), 1);
+ add_next_index_rt_string(return_value, inet_ntoa(in), 1);
}
}
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/standard/filestat.c?r1=1.136&r2=1.137&ty=u
Index: php-src/ext/standard/filestat.c
diff -u php-src/ext/standard/filestat.c:1.136
php-src/ext/standard/filestat.c:1.137
--- php-src/ext/standard/filestat.c:1.136 Wed Aug 3 10:07:59 2005
+++ php-src/ext/standard/filestat.c Tue Aug 23 08:53:23 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filestat.c,v 1.136 2005/08/03 14:07:59 sniper Exp $ */
+/* $Id: filestat.c,v 1.137 2005/08/23 12:53:23 dmitry Exp $ */
#include "php.h"
#include "safe_mode.h"
@@ -658,20 +658,20 @@
#endif
case FS_TYPE:
if (S_ISLNK(ssb.sb.st_mode)) {
- RETURN_STRING("link", 1);
+ RETURN_ASCII_STRING("link", 1);
}
switch(ssb.sb.st_mode & S_IFMT) {
- case S_IFIFO: RETURN_STRING("fifo", 1);
- case S_IFCHR: RETURN_STRING("char", 1);
- case S_IFDIR: RETURN_STRING("dir", 1);
- case S_IFBLK: RETURN_STRING("block", 1);
- case S_IFREG: RETURN_STRING("file", 1);
+ case S_IFIFO: RETURN_ASCII_STRING("fifo", 1);
+ case S_IFCHR: RETURN_ASCII_STRING("char", 1);
+ case S_IFDIR: RETURN_ASCII_STRING("dir", 1);
+ case S_IFBLK: RETURN_ASCII_STRING("block", 1);
+ case S_IFREG: RETURN_ASCII_STRING("file", 1);
#if defined(S_IFSOCK) && !defined(ZEND_WIN32)&&!defined(__BEOS__)
- case S_IFSOCK: RETURN_STRING("socket", 1);
+ case S_IFSOCK: RETURN_ASCII_STRING("socket", 1);
#endif
}
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown file type
(%d)", ssb.sb.st_mode&S_IFMT);
- RETURN_STRING("unknown", 1);
+ RETURN_ASCII_STRING("unknown", 1);
case FS_IS_W:
RETURN_BOOL((ssb.sb.st_mode & wmask) != 0);
case FS_IS_R:
http://cvs.php.net/diff.php/php-src/ext/standard/info.c?r1=1.253&r2=1.254&ty=u
Index: php-src/ext/standard/info.c
diff -u php-src/ext/standard/info.c:1.253 php-src/ext/standard/info.c:1.254
--- php-src/ext/standard/info.c:1.253 Mon Aug 15 20:25:21 2005
+++ php-src/ext/standard/info.c Tue Aug 23 08:53:24 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: info.c,v 1.253 2005/08/16 00:25:21 iliaa Exp $ */
+/* $Id: info.c,v 1.254 2005/08/23 12:53:24 dmitry Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -1011,7 +1011,7 @@
int argc = ZEND_NUM_ARGS();
if (argc == 0) {
- RETURN_STRING(PHP_VERSION, 1);
+ RETURN_ASCII_STRING(PHP_VERSION, 1);
} else if (argc == 1 && zend_get_parameters_ex(1, &arg) == SUCCESS) {
char *version;
convert_to_string_ex(arg);
@@ -1019,7 +1019,7 @@
if (version == NULL) {
RETURN_FALSE;
}
- RETURN_STRING(version, 1);
+ RETURN_ASCII_STRING(version, 1);
} else {
WRONG_PARAM_COUNT;
}
@@ -1079,7 +1079,7 @@
WRONG_PARAM_COUNT;
}
- RETURN_STRING(php_logo_guid(), 0);
+ RETURN_ASCII_STRING(php_logo_guid(), 0);
}
/* }}} */
@@ -1092,7 +1092,7 @@
WRONG_PARAM_COUNT;
}
- RETURN_STRINGL(PHP_LOGO_GUID, sizeof(PHP_LOGO_GUID)-1, 1);
+ RETURN_ASCII_STRINGL(PHP_LOGO_GUID, sizeof(PHP_LOGO_GUID)-1, 1);
}
/* }}} */
@@ -1104,7 +1104,7 @@
WRONG_PARAM_COUNT;
}
- RETURN_STRINGL(PHP_EGG_LOGO_GUID, sizeof(PHP_EGG_LOGO_GUID)-1, 1);
+ RETURN_ASCII_STRINGL(PHP_EGG_LOGO_GUID, sizeof(PHP_EGG_LOGO_GUID)-1, 1);
}
/* }}} */
@@ -1116,7 +1116,7 @@
WRONG_PARAM_COUNT;
}
- RETURN_STRINGL(ZEND_LOGO_GUID, sizeof(ZEND_LOGO_GUID)-1, 1);
+ RETURN_ASCII_STRINGL(ZEND_LOGO_GUID, sizeof(ZEND_LOGO_GUID)-1, 1);
}
/* }}} */
@@ -1129,7 +1129,7 @@
}
if (sapi_module.name) {
- RETURN_STRING(sapi_module.name, 1);
+ RETURN_ASCII_STRING(sapi_module.name, 1);
} else {
RETURN_FALSE;
}
@@ -1143,10 +1143,16 @@
{
char *mode = "a";
int modelen;
+ char *tmp;
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &mode,
&modelen) == FAILURE) {
return;
}
- RETURN_STRING(php_get_uname(*mode), 0);
+ tmp = php_get_uname(*mode);
+ RETVAL_RT_STRING(tmp, 0);
+ if (UG(unicode)) {
+ efree(tmp);
+ }
}
/* }}} */
@@ -1156,7 +1162,7 @@
PHP_FUNCTION(php_ini_scanned_files)
{
if (strlen(PHP_CONFIG_FILE_SCAN_DIR) && php_ini_scanned_files) {
- RETURN_STRING(php_ini_scanned_files, 1);
+ RETURN_RT_STRING(php_ini_scanned_files, 1);
} else {
RETURN_FALSE;
}
http://cvs.php.net/diff.php/php-src/ext/standard/link.c?r1=1.52&r2=1.53&ty=u
Index: php-src/ext/standard/link.c
diff -u php-src/ext/standard/link.c:1.52 php-src/ext/standard/link.c:1.53
--- php-src/ext/standard/link.c:1.52 Wed Aug 3 10:08:08 2005
+++ php-src/ext/standard/link.c Tue Aug 23 08:53:28 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: link.c,v 1.52 2005/08/03 14:08:08 sniper Exp $ */
+/* $Id: link.c,v 1.53 2005/08/23 12:53:28 dmitry Exp $ */
#include "php.h"
#include "php_filestat.h"
@@ -80,7 +80,7 @@
/* Append NULL to the end of the string */
buff[ret] = '\0';
- RETURN_STRING(buff, 1);
+ RETURN_RT_STRING(buff, 1);
}
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/standard/string.c?r1=1.471&r2=1.472&ty=u
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.471 php-src/ext/standard/string.c:1.472
--- php-src/ext/standard/string.c:1.471 Tue Aug 23 05:33:46 2005
+++ php-src/ext/standard/string.c Tue Aug 23 08:53:28 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: string.c,v 1.471 2005/08/23 09:33:46 dmitry Exp $ */
+/* $Id: string.c,v 1.472 2005/08/23 12:53:28 dmitry Exp $ */
/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
@@ -1761,14 +1761,17 @@
ret = estrndup(path, path_len);
php_dirname(ret, path_len);
if (*ret) {
- add_assoc_string(tmp, "dirname", ret, 1);
+ add_assoc_rt_string(tmp, "dirname", ret, 1);
}
efree(ret);
}
if ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME) {
php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
- add_assoc_stringl(tmp, "basename", ret, ret_len, 0);
+ add_assoc_rt_stringl(tmp, "basename", ret, ret_len, 0);
+ if (UG(unicode)) {
+ efree(ret);
+ }
}
if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
@@ -1785,7 +1788,7 @@
if (p) {
idx = p - ret;
- add_assoc_stringl(tmp, "extension", ret + idx + 1,
ret_len - idx - 1, 1);
+ add_assoc_rt_stringl(tmp, "extension", ret + idx + 1,
ret_len - idx - 1, 1);
}
if (!have_basename) {
http://cvs.php.net/diff.php/php-src/ext/standard/type.c?r1=1.35&r2=1.36&ty=u
Index: php-src/ext/standard/type.c
diff -u php-src/ext/standard/type.c:1.35 php-src/ext/standard/type.c:1.36
--- php-src/ext/standard/type.c:1.35 Mon Aug 22 08:22:15 2005
+++ php-src/ext/standard/type.c Tue Aug 23 08:53:30 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: type.c,v 1.35 2005/08/22 12:22:15 dmitry Exp $ */
+/* $Id: type.c,v 1.36 2005/08/23 12:53:30 dmitry Exp $ */
#include "php.h"
#include "php_incomplete_class.h"
@@ -33,39 +33,39 @@
switch (Z_TYPE_PP(arg)) {
case IS_NULL:
- RETVAL_STRING("NULL", 1);
+ RETVAL_ASCII_STRING("NULL", 1);
break;
case IS_BOOL:
- RETVAL_STRING("boolean", 1);
+ RETVAL_ASCII_STRING("boolean", 1);
break;
case IS_LONG:
- RETVAL_STRING("integer", 1);
+ RETVAL_ASCII_STRING("integer", 1);
break;
case IS_DOUBLE:
- RETVAL_STRING("double", 1);
+ RETVAL_ASCII_STRING("double", 1);
break;
case IS_STRING:
- RETVAL_STRING("string", 1);
+ RETVAL_ASCII_STRING("string", 1);
break;
case IS_BINARY:
- RETVAL_STRING("binary", 1);
+ RETVAL_ASCII_STRING("binary", 1);
break;
case IS_UNICODE:
- RETVAL_STRING("unicode", 1);
+ RETVAL_ASCII_STRING("unicode", 1);
break;
case IS_ARRAY:
- RETVAL_STRING("array", 1);
+ RETVAL_ASCII_STRING("array", 1);
break;
case IS_OBJECT:
- RETVAL_STRING("object", 1);
+ RETVAL_ASCII_STRING("object", 1);
/*
{
char *result;
@@ -84,13 +84,13 @@
char *type_name;
type_name =
zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC);
if (type_name) {
- RETVAL_STRING("resource", 1);
+ RETVAL_ASCII_STRING("resource", 1);
break;
}
}
default:
- RETVAL_STRING("unknown type", 1);
+ RETVAL_ASCII_STRING("unknown type", 1);
}
}
/* }}} */
@@ -368,6 +368,15 @@
}
break;
+ case IS_UNICODE:
+ result = is_numeric_unicode(Z_USTRVAL_PP(arg),
Z_USTRLEN_PP(arg), NULL, NULL, 0);
+ if (result == IS_LONG || result == IS_DOUBLE) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
+ break;
+
default:
RETURN_FALSE;
break;
http://cvs.php.net/diff.php/php-src/ext/standard/uniqid.c?r1=1.41&r2=1.42&ty=u
Index: php-src/ext/standard/uniqid.c
diff -u php-src/ext/standard/uniqid.c:1.41 php-src/ext/standard/uniqid.c:1.42
--- php-src/ext/standard/uniqid.c:1.41 Wed Aug 3 10:08:14 2005
+++ php-src/ext/standard/uniqid.c Tue Aug 23 08:53:30 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uniqid.c,v 1.41 2005/08/03 14:08:14 sniper Exp $ */
+/* $Id: uniqid.c,v 1.42 2005/08/23 12:53:30 dmitry Exp $ */
#include "php.h"
@@ -81,7 +81,7 @@
spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
}
- RETURN_STRING(uniqid, 0);
+ RETURN_RT_STRING(uniqid, 0);
}
#endif
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/standard/tests/file/userdirstream.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/standard/tests/file/userdirstream.phpt
diff -u php-src/ext/standard/tests/file/userdirstream.phpt:1.1
php-src/ext/standard/tests/file/userdirstream.phpt:1.2
--- php-src/ext/standard/tests/file/userdirstream.phpt:1.1 Wed Mar 17
15:48:12 2004
+++ php-src/ext/standard/tests/file/userdirstream.phpt Tue Aug 23 08:53:30 2005
@@ -49,4 +49,16 @@
[3]=>
string(5) "third"
}
-
+--UEXPECT--
+Opening
+Closing up!
+array(4) {
+ [0]=>
+ unicode(5) "first"
+ [1]=>
+ unicode(6) "fourth"
+ [2]=>
+ unicode(6) "second"
+ [3]=>
+ unicode(5) "third"
+}
http://cvs.php.net/diff.php/php-src/ext/standard/tests/strings/bug24098.phpt?r1=1.2&r2=1.3&ty=u
Index: php-src/ext/standard/tests/strings/bug24098.phpt
diff -u php-src/ext/standard/tests/strings/bug24098.phpt:1.2
php-src/ext/standard/tests/strings/bug24098.phpt:1.3
--- php-src/ext/standard/tests/strings/bug24098.phpt:1.2 Fri Dec 5
08:42:04 2003
+++ php-src/ext/standard/tests/strings/bug24098.phpt Tue Aug 23 08:53:30 2005
@@ -15,3 +15,12 @@
["extension"]=>
string(3) "asa"
}
+--UEXPECT--
+array(3) {
+ [u"dirname"]=>
+ unicode(1) "/"
+ [u"basename"]=>
+ unicode(8) "dsds.asa"
+ [u"extension"]=>
+ unicode(3) "asa"
+}
http://cvs.php.net/diff.php/php-src/tests/reflection/parameters_001.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/tests/reflection/parameters_001.phpt
diff -u php-src/tests/reflection/parameters_001.phpt:1.3
php-src/tests/reflection/parameters_001.phpt:1.4
--- php-src/tests/reflection/parameters_001.phpt:1.3 Mon Aug 2 19:10:53 2004
+++ php-src/tests/reflection/parameters_001.phpt Tue Aug 23 08:53:31 2005
@@ -36,3 +36,10 @@
bool(true)
string(54) "The parameter specified by its name could not be found"
===DONE===
+--UEXPECT--
+int(2)
+int(1)
+bool(false)
+bool(true)
+unicode(54) "The parameter specified by its name could not be found"
+===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php