diff options
author | Dmitry Stogov <dmitry@php.net> | 2005-08-23 12:53:31 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2005-08-23 12:53:31 +0000 |
commit | 8f6f97a77d6609c34df3d9eb9e2f433de47c3f16 (patch) | |
tree | 3c7b2967dd568517f40eb2c57dfdd1b6cda5ffa5 /ext | |
parent | 411e8e154db1c18754e7b958107b421b0343829f (diff) | |
download | php-git-8f6f97a77d6609c34df3d9eb9e2f433de47c3f16.tar.gz |
Unicode support
Diffstat (limited to 'ext')
-rwxr-xr-x | ext/reflection/tests/parameters_001.phpt | 7 | ||||
-rw-r--r-- | ext/standard/dir.c | 15 | ||||
-rw-r--r-- | ext/standard/dns.c | 14 | ||||
-rw-r--r-- | ext/standard/filestat.c | 16 | ||||
-rw-r--r-- | ext/standard/info.c | 24 | ||||
-rw-r--r-- | ext/standard/link.c | 2 | ||||
-rw-r--r-- | ext/standard/string.c | 9 | ||||
-rw-r--r-- | ext/standard/tests/file/userdirstream.phpt | 14 | ||||
-rw-r--r-- | ext/standard/tests/strings/bug24098.phpt | 9 | ||||
-rw-r--r-- | ext/standard/type.c | 31 | ||||
-rw-r--r-- | ext/standard/uniqid.c | 2 |
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 /* }}} */ |