diff options
author | Moriyoshi Koizumi <moriyoshi@php.net> | 2008-09-13 00:30:51 +0000 |
---|---|---|
committer | Moriyoshi Koizumi <moriyoshi@php.net> | 2008-09-13 00:30:51 +0000 |
commit | b8e81fd0a78191f8eda1eb88fa3c07a996d0aec0 (patch) | |
tree | 69f67755d873fbe4d9b1ea2c4e8166aeea0950b7 | |
parent | a4cb898283facb8909f55a97f3aa32bebdf7f6ed (diff) | |
download | php-git-b8e81fd0a78191f8eda1eb88fa3c07a996d0aec0.tar.gz |
- MFH: mb_list_*() issue settlements
-rw-r--r-- | ext/mbstring/mbstring.c | 118 | ||||
-rw-r--r-- | ext/mbstring/mbstring.h | 3 | ||||
-rw-r--r-- | ext/mbstring/tests/mb_encoding_aliases.phpt | 41 | ||||
-rw-r--r-- | ext/mbstring/tests/mb_list_encodings.phpt | 14 |
4 files changed, 74 insertions, 102 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 4d3999f316..18e281d670 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -401,6 +401,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_mb_list_encodings, 0) ZEND_END_ARG_INFO() static +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encoding_aliases, 0, 0, 1) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encode_mimeheader, 0, 0, 1) ZEND_ARG_INFO(0, str) ZEND_ARG_INFO(0, charset) @@ -585,6 +590,7 @@ const zend_function_entry mbstring_functions[] = { PHP_FE(mb_convert_encoding, arginfo_mb_convert_encoding) PHP_FE(mb_detect_encoding, arginfo_mb_detect_encoding) PHP_FE(mb_list_encodings, arginfo_mb_list_encodings) + PHP_FE(mb_encoding_aliases, arginfo_mb_encoding_aliases) PHP_FE(mb_convert_kana, arginfo_mb_convert_kana) PHP_FE(mb_encode_mimeheader, arginfo_mb_encode_mimeheader) PHP_FE(mb_decode_mimeheader, arginfo_mb_decode_mimeheader) @@ -3298,117 +3304,29 @@ PHP_FUNCTION(mb_list_encodings) } /* }}} */ -/* {{{ proto array mb_list_encodings_alias_names([string encoding]) - Returns an array of all supported alias encodings */ -PHP_FUNCTION(mb_list_encodings_alias_names) +/* {{{ proto array mb_encoding_aliases(string encoding) + Returns an array of the aliases of a given encoding name */ +PHP_FUNCTION(mb_encoding_aliases) { - const mbfl_encoding **encodings; const mbfl_encoding *encoding; - enum mbfl_no_encoding no_encoding; - int i, j; - zval *row; char *name = NULL; int name_len; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { RETURN_FALSE; } - if (name == NULL) { - array_init(return_value); - i = 0; - encodings = mbfl_get_supported_encodings(); - while ((encoding = encodings[i++]) != NULL) { - MAKE_STD_ZVAL(row); - array_init(row); - if (encoding->aliases != NULL) { - j = 0; - while ((*encoding->aliases)[j] != NULL) { - add_next_index_string(row, (char *)(*encoding->aliases)[j], 1); - j++; - } - } - add_assoc_zval(return_value, (char *) encoding->name, row); - } - } else { - no_encoding = mbfl_name2no_encoding(name); - if (no_encoding == mbfl_no_encoding_invalid) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); - RETURN_FALSE; - } - - name = (char *)mbfl_no_encoding2name(no_encoding); - if (name != NULL) { - i = 0; - encodings = mbfl_get_supported_encodings(); - while ((encoding = encodings[i++]) != NULL) { - if (strcmp(encoding->name, name) != 0){ continue; } - - array_init(return_value); - if (encoding->aliases != NULL) { - j = 0; - while ((*encoding->aliases)[j] != NULL) { - add_next_index_string(return_value, (char *)(*encoding->aliases)[j], 1); - j++; - } - } - - break; - } - } else { - RETURN_FALSE; - } - } -} -/* }}} */ - -/* {{{ proto mixed mb_list_mime_names([string encoding]) - Returns an array or string of all supported mime names */ -PHP_FUNCTION(mb_list_mime_names) -{ - const mbfl_encoding **encodings; - const mbfl_encoding *encoding; - enum mbfl_no_encoding no_encoding; - int i; - char *name = NULL; - int name_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + encoding = mbfl_name2encoding(name); + if (!encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); RETURN_FALSE; } - if (name == NULL) { - array_init(return_value); - i = 0; - encodings = mbfl_get_supported_encodings(); - while ((encoding = encodings[i++]) != NULL) { - if(encoding->mime_name != NULL) { - add_assoc_string(return_value, (char *) encoding->name, (char *) encoding->mime_name, 1); - } else{ - add_assoc_string(return_value, (char *) encoding->name, "", 1); - } - } - } else { - no_encoding = mbfl_name2no_encoding(name); - if (no_encoding == mbfl_no_encoding_invalid) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); - RETURN_FALSE; - } - - name = (char *)mbfl_no_encoding2name(no_encoding); - if (name != NULL) { - i = 0; - encodings = mbfl_get_supported_encodings(); - while ((encoding = encodings[i++]) != NULL) { - if (strcmp(encoding->name, name) != 0){ continue; } - if(encoding->mime_name != NULL) { - RETURN_STRING((char *) encoding->mime_name, 1); - } - break; - } - RETURN_STRING("", 1); - } else { - RETURN_FALSE; + array_init(return_value); + if (encoding->aliases != NULL) { + const char **alias; + for (alias = *encoding->aliases; *alias; ++alias) { + add_next_index_string(return_value, (char *)*alias, 1); } } } diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h index 290c4d6171..83204f5f54 100644 --- a/ext/mbstring/mbstring.h +++ b/ext/mbstring/mbstring.h @@ -117,8 +117,7 @@ PHP_FUNCTION(mb_strimwidth); PHP_FUNCTION(mb_convert_encoding); PHP_FUNCTION(mb_detect_encoding); PHP_FUNCTION(mb_list_encodings); -PHP_FUNCTION(mb_list_encodings_alias_names); -PHP_FUNCTION(mb_list_mime_names); +PHP_FUNCTION(mb_encoding_aliases); PHP_FUNCTION(mb_convert_kana); PHP_FUNCTION(mb_encode_mimeheader); PHP_FUNCTION(mb_decode_mimeheader); diff --git a/ext/mbstring/tests/mb_encoding_aliases.phpt b/ext/mbstring/tests/mb_encoding_aliases.phpt new file mode 100644 index 0000000000..7b87045d0e --- /dev/null +++ b/ext/mbstring/tests/mb_encoding_aliases.phpt @@ -0,0 +1,41 @@ +--TEST-- +mb_encoding_aliases() +--FILE-- +<?php +mb_encoding_aliases(); +$list = mb_encoding_aliases("ASCII"); +sort($list); +var_dump($list); +var_dump(mb_encoding_aliases("7bit")); +var_dump(mb_encoding_aliases("8bit")); +?> +--EXPECTF-- +Warning: mb_encoding_aliases() expects exactly 1 parameter, 0 given in %s on line 2 +array(10) { + [0]=> + string(14) "ANSI_X3.4-1968" + [1]=> + string(14) "ANSI_X3.4-1986" + [2]=> + string(6) "IBM367" + [3]=> + string(9) "ISO646-US" + [4]=> + string(16) "ISO_646.irv:1991" + [5]=> + string(8) "US-ASCII" + [6]=> + string(5) "cp367" + [7]=> + string(7) "csASCII" + [8]=> + string(8) "iso-ir-6" + [9]=> + string(2) "us" +} +array(0) { +} +array(1) { + [0]=> + string(6) "binary" +} diff --git a/ext/mbstring/tests/mb_list_encodings.phpt b/ext/mbstring/tests/mb_list_encodings.phpt new file mode 100644 index 0000000000..e155cb851d --- /dev/null +++ b/ext/mbstring/tests/mb_list_encodings.phpt @@ -0,0 +1,14 @@ +--TEST-- +mb_list_encodings +--FILE-- +<?php +var_dump(in_array("7bit", mb_list_encodings())); +var_dump(in_array("8bit", mb_list_encodings())); +var_dump(in_array("ASCII", mb_list_encodings())); +var_dump(in_array("non-existent", mb_list_encodings())); +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(false) |