summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2005-08-23 12:53:31 +0000
committerDmitry Stogov <dmitry@php.net>2005-08-23 12:53:31 +0000
commit8f6f97a77d6609c34df3d9eb9e2f433de47c3f16 (patch)
tree3c7b2967dd568517f40eb2c57dfdd1b6cda5ffa5 /ext
parent411e8e154db1c18754e7b958107b421b0343829f (diff)
downloadphp-git-8f6f97a77d6609c34df3d9eb9e2f433de47c3f16.tar.gz
Unicode support
Diffstat (limited to 'ext')
-rwxr-xr-xext/reflection/tests/parameters_001.phpt7
-rw-r--r--ext/standard/dir.c15
-rw-r--r--ext/standard/dns.c14
-rw-r--r--ext/standard/filestat.c16
-rw-r--r--ext/standard/info.c24
-rw-r--r--ext/standard/link.c2
-rw-r--r--ext/standard/string.c9
-rw-r--r--ext/standard/tests/file/userdirstream.phpt14
-rw-r--r--ext/standard/tests/strings/bug24098.phpt9
-rw-r--r--ext/standard/type.c31
-rw-r--r--ext/standard/uniqid.c2
11 files changed, 100 insertions, 43 deletions
diff --git a/ext/reflection/tests/parameters_001.phpt b/ext/reflection/tests/parameters_001.phpt
index 709944677f..3e0cff13e7 100755
--- a/ext/reflection/tests/parameters_001.phpt
+++ b/ext/reflection/tests/parameters_001.phpt
@@ -36,3 +36,10 @@ bool(false)
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===
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
index cc452b5a62..f250f82e2e 100644
--- a/ext/standard/dir.c
+++ b/ext/standard/dir.c
@@ -201,8 +201,8 @@ static void _php_do_opendir(INTERNAL_FUNCTION_PARAMETERS, int createobject)
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 @@ PHP_FUNCTION(getcwd)
#endif
if (ret) {
- RETURN_STRING(path, 1);
+ RETURN_RT_STRING(path, 1);
} else {
RETURN_FALSE;
}
@@ -349,7 +349,7 @@ PHP_NAMED_FUNCTION(php_if_readdir)
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 @@ PHP_FUNCTION(glob)
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 @@ PHP_FUNCTION(scandir)
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) {
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index 7e631ff926..e0de17992a 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -142,7 +142,10 @@ PHP_FUNCTION(gethostbyaddr)
#endif
RETVAL_FALSE;
} else {
- RETVAL_STRING(addr, 0);
+ RETVAL_RT_STRING(addr, 0);
+ if (UG(unicode)) {
+ efree(addr);
+ }
}
}
/* }}} */
@@ -187,6 +190,7 @@ static char *php_gethostbyaddr(char *ip)
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 @@ PHP_FUNCTION(gethostbyname)
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 @@ PHP_FUNCTION(gethostbynamel)
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);
}
}
/* }}} */
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index 3d628c7042..124ccbef5e 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -658,20 +658,20 @@ PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int typ
#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:
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 00726debaf..521fd6e111 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -1011,7 +1011,7 @@ PHP_FUNCTION(phpversion)
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 @@ PHP_FUNCTION(phpversion)
if (version == NULL) {
RETURN_FALSE;
}
- RETURN_STRING(version, 1);
+ RETURN_ASCII_STRING(version, 1);
} else {
WRONG_PARAM_COUNT;
}
@@ -1079,7 +1079,7 @@ PHP_FUNCTION(php_logo_guid)
WRONG_PARAM_COUNT;
}
- RETURN_STRING(php_logo_guid(), 0);
+ RETURN_ASCII_STRING(php_logo_guid(), 0);
}
/* }}} */
@@ -1092,7 +1092,7 @@ PHP_FUNCTION(php_real_logo_guid)
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 @@ PHP_FUNCTION(php_egg_logo_guid)
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 @@ PHP_FUNCTION(zend_logo_guid)
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 @@ PHP_FUNCTION(php_sapi_name)
}
if (sapi_module.name) {
- RETURN_STRING(sapi_module.name, 1);
+ RETURN_ASCII_STRING(sapi_module.name, 1);
} else {
RETURN_FALSE;
}
@@ -1143,10 +1143,16 @@ PHP_FUNCTION(php_uname)
{
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_uname)
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;
}
diff --git a/ext/standard/link.c b/ext/standard/link.c
index 3297537d04..c790372f09 100644
--- a/ext/standard/link.c
+++ b/ext/standard/link.c
@@ -80,7 +80,7 @@ PHP_FUNCTION(readlink)
/* Append NULL to the end of the string */
buff[ret] = '\0';
- RETURN_STRING(buff, 1);
+ RETURN_RT_STRING(buff, 1);
}
/* }}} */
diff --git a/ext/standard/string.c b/ext/standard/string.c
index eaf37fd207..8aecbccc1d 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1761,14 +1761,17 @@ PHP_FUNCTION(pathinfo)
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 @@ PHP_FUNCTION(pathinfo)
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) {
diff --git a/ext/standard/tests/file/userdirstream.phpt b/ext/standard/tests/file/userdirstream.phpt
index d457b1988d..f857b3c82f 100644
--- a/ext/standard/tests/file/userdirstream.phpt
+++ b/ext/standard/tests/file/userdirstream.phpt
@@ -49,4 +49,16 @@ array(4) {
[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"
+}
diff --git a/ext/standard/tests/strings/bug24098.phpt b/ext/standard/tests/strings/bug24098.phpt
index 9ff51a420f..967da15450 100644
--- a/ext/standard/tests/strings/bug24098.phpt
+++ b/ext/standard/tests/strings/bug24098.phpt
@@ -15,3 +15,12 @@ array(3) {
["extension"]=>
string(3) "asa"
}
+--UEXPECT--
+array(3) {
+ [u"dirname"]=>
+ unicode(1) "/"
+ [u"basename"]=>
+ unicode(8) "dsds.asa"
+ [u"extension"]=>
+ unicode(3) "asa"
+}
diff --git a/ext/standard/type.c b/ext/standard/type.c
index 161ce7f5f0..a98d9cf1d6 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -33,39 +33,39 @@ PHP_FUNCTION(gettype)
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 @@ PHP_FUNCTION(gettype)
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 @@ PHP_FUNCTION(is_numeric)
}
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;
diff --git a/ext/standard/uniqid.c b/ext/standard/uniqid.c
index d4f9fe75b3..9d69238703 100644
--- a/ext/standard/uniqid.c
+++ b/ext/standard/uniqid.c
@@ -81,7 +81,7 @@ PHP_FUNCTION(uniqid)
spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
}
- RETURN_STRING(uniqid, 0);
+ RETURN_RT_STRING(uniqid, 0);
}
#endif
/* }}} */