mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Use new-style argument parsing macros in mbstring.c
This commit is contained in:
parent
d4ef7ef11d
commit
29b02bf290
@ -1,20 +1,20 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
|
||||
| Rui Hirokawa <hirokawa@php.net> |
|
||||
| Hironori Sato <satoh@jpnnet.com> |
|
||||
| Shigeru Kanemoto <sgk@happysize.co.jp> |
|
||||
+----------------------------------------------------------------------+
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
|
||||
| Rui Hirokawa <hirokawa@php.net> |
|
||||
| Hironori Sato <satoh@jpnnet.com> |
|
||||
| Shigeru Kanemoto <sgk@happysize.co.jp> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* {{{ includes */
|
||||
@ -1273,9 +1273,11 @@ PHP_FUNCTION(mb_language)
|
||||
{
|
||||
zend_string *name = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S!", &name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(0, 1)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (name == NULL) {
|
||||
RETVAL_STRING((char *)mbfl_no_language2name(MBSTRG(language)));
|
||||
} else {
|
||||
@ -1295,13 +1297,15 @@ PHP_FUNCTION(mb_language)
|
||||
/* {{{ Sets the current internal encoding or Returns the current internal encoding as a string */
|
||||
PHP_FUNCTION(mb_internal_encoding)
|
||||
{
|
||||
const char *name = NULL;
|
||||
char *name = NULL;
|
||||
size_t name_len;
|
||||
const mbfl_encoding *encoding;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!", &name, &name_len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(0, 1)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(name, name_len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (name == NULL) {
|
||||
ZEND_ASSERT(MBSTRG(current_internal_encoding));
|
||||
RETURN_STRING(MBSTRG(current_internal_encoding)->name);
|
||||
@ -1325,14 +1329,15 @@ PHP_FUNCTION(mb_http_input)
|
||||
{
|
||||
char *typ = NULL;
|
||||
size_t typ_len = 0;
|
||||
int retname;
|
||||
int retname = 1;
|
||||
char *list, *temp;
|
||||
const mbfl_encoding *result = NULL;
|
||||
|
||||
retname = 1;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!", &typ, &typ_len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(0, 1)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(typ, typ_len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (typ == NULL) {
|
||||
result = MBSTRG(http_input_identify);
|
||||
} else {
|
||||
@ -1417,13 +1422,14 @@ PHP_FUNCTION(mb_http_input)
|
||||
/* {{{ Sets the current output_encoding or returns the current output_encoding as a string */
|
||||
PHP_FUNCTION(mb_http_output)
|
||||
{
|
||||
const char *name = NULL;
|
||||
char *name = NULL;
|
||||
size_t name_len;
|
||||
const mbfl_encoding *encoding;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!", &name, &name_len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(0, 1)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(name, name_len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (name == NULL) {
|
||||
ZEND_ASSERT(MBSTRG(current_http_output_encoding));
|
||||
@ -1572,9 +1578,9 @@ PHP_FUNCTION(mb_preferred_mime_name)
|
||||
char *name = NULL;
|
||||
size_t name_len;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||
Z_PARAM_STRING(name, name_len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
no_encoding = mbfl_name2no_encoding(name);
|
||||
if (no_encoding == mbfl_no_encoding_invalid) {
|
||||
@ -1598,16 +1604,16 @@ PHP_FUNCTION(mb_preferred_mime_name)
|
||||
/* {{{ Parses GET/POST/COOKIE data and sets global variables */
|
||||
PHP_FUNCTION(mb_parse_str)
|
||||
{
|
||||
zval *track_vars_array;
|
||||
zval *track_vars_array = NULL;
|
||||
char *encstr;
|
||||
size_t encstr_len;
|
||||
php_mb_encoding_handler_info_t info;
|
||||
const mbfl_encoding *detected;
|
||||
|
||||
track_vars_array = NULL;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sz", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 2)
|
||||
Z_PARAM_STRING(encstr, encstr_len)
|
||||
Z_PARAM_ZVAL(track_vars_array)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
track_vars_array = zend_try_array_init(track_vars_array);
|
||||
if (!track_vars_array) {
|
||||
@ -1650,20 +1656,21 @@ PHP_FUNCTION(mb_output_handler)
|
||||
unsigned char send_text_mimetype = 0;
|
||||
char *s, *mimetype = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl", &arg_string, &arg_string_len, &arg_status) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 2)
|
||||
Z_PARAM_STRING(arg_string, arg_string_len)
|
||||
Z_PARAM_LONG(arg_status)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
encoding = MBSTRG(current_http_output_encoding);
|
||||
|
||||
/* start phase only */
|
||||
if ((arg_status & PHP_OUTPUT_HANDLER_START) != 0) {
|
||||
/* delete the converter just in case. */
|
||||
if (MBSTRG(outconv)) {
|
||||
/* start phase only */
|
||||
if ((arg_status & PHP_OUTPUT_HANDLER_START) != 0) {
|
||||
/* delete the converter just in case. */
|
||||
if (MBSTRG(outconv)) {
|
||||
MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv));
|
||||
mbfl_buffer_converter_delete(MBSTRG(outconv));
|
||||
MBSTRG(outconv) = NULL;
|
||||
}
|
||||
mbfl_buffer_converter_delete(MBSTRG(outconv));
|
||||
MBSTRG(outconv) = NULL;
|
||||
}
|
||||
if (encoding == &mbfl_encoding_pass) {
|
||||
RETURN_STRINGL(arg_string, arg_string_len);
|
||||
}
|
||||
@ -1684,8 +1691,8 @@ PHP_FUNCTION(mb_output_handler)
|
||||
mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
|
||||
}
|
||||
|
||||
/* if content-type is not yet set, set it and activate the converter */
|
||||
if (SG(sapi_headers).send_default_content_type || send_text_mimetype) {
|
||||
/* if content-type is not yet set, set it and activate the converter */
|
||||
if (SG(sapi_headers).send_default_content_type || send_text_mimetype) {
|
||||
charset = encoding->mime_name;
|
||||
if (charset) {
|
||||
len = spprintf( &p, 0, "Content-Type: %s; charset=%s", mimetype, charset );
|
||||
@ -1693,44 +1700,44 @@ PHP_FUNCTION(mb_output_handler)
|
||||
SG(sapi_headers).send_default_content_type = 0;
|
||||
}
|
||||
}
|
||||
/* activate the converter */
|
||||
MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0);
|
||||
/* activate the converter */
|
||||
MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0);
|
||||
if (send_text_mimetype){
|
||||
efree(mimetype);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* just return if the converter is not activated. */
|
||||
if (MBSTRG(outconv) == NULL) {
|
||||
/* just return if the converter is not activated. */
|
||||
if (MBSTRG(outconv) == NULL) {
|
||||
RETURN_STRINGL(arg_string, arg_string_len);
|
||||
}
|
||||
|
||||
/* flag */
|
||||
last_feed = ((arg_status & PHP_OUTPUT_HANDLER_END) != 0);
|
||||
/* mode */
|
||||
mbfl_buffer_converter_illegal_mode(MBSTRG(outconv), MBSTRG(current_filter_illegal_mode));
|
||||
mbfl_buffer_converter_illegal_substchar(MBSTRG(outconv), MBSTRG(current_filter_illegal_substchar));
|
||||
/* flag */
|
||||
last_feed = ((arg_status & PHP_OUTPUT_HANDLER_END) != 0);
|
||||
/* mode */
|
||||
mbfl_buffer_converter_illegal_mode(MBSTRG(outconv), MBSTRG(current_filter_illegal_mode));
|
||||
mbfl_buffer_converter_illegal_substchar(MBSTRG(outconv), MBSTRG(current_filter_illegal_substchar));
|
||||
|
||||
/* feed the string */
|
||||
mbfl_string_init(&string);
|
||||
/* feed the string */
|
||||
mbfl_string_init(&string);
|
||||
/* these are not needed. convd has encoding info.
|
||||
string.encoding = MBSTRG(current_internal_encoding);
|
||||
*/
|
||||
string.val = (unsigned char *)arg_string;
|
||||
string.len = arg_string_len;
|
||||
mbfl_buffer_converter_feed(MBSTRG(outconv), &string);
|
||||
if (last_feed) {
|
||||
mbfl_buffer_converter_flush(MBSTRG(outconv));
|
||||
string.val = (unsigned char *)arg_string;
|
||||
string.len = arg_string_len;
|
||||
mbfl_buffer_converter_feed(MBSTRG(outconv), &string);
|
||||
if (last_feed) {
|
||||
mbfl_buffer_converter_flush(MBSTRG(outconv));
|
||||
}
|
||||
/* get the converter output, and return it */
|
||||
mbfl_buffer_converter_result(MBSTRG(outconv), &result);
|
||||
/* get the converter output, and return it */
|
||||
mbfl_buffer_converter_result(MBSTRG(outconv), &result);
|
||||
// TODO: avoid reallocation ???
|
||||
RETVAL_STRINGL((char *)result.val, result.len); /* the string is already strdup()'ed */
|
||||
RETVAL_STRINGL((char *)result.val, result.len); /* the string is already strdup()'ed */
|
||||
efree(result.val);
|
||||
|
||||
/* delete the converter if it is the last feed. */
|
||||
if (last_feed) {
|
||||
/* delete the converter if it is the last feed. */
|
||||
if (last_feed) {
|
||||
MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv));
|
||||
mbfl_buffer_converter_delete(MBSTRG(outconv));
|
||||
MBSTRG(outconv) = NULL;
|
||||
@ -1743,30 +1750,30 @@ PHP_FUNCTION(mb_output_handler)
|
||||
|
||||
/* structure to pass split params to the callback */
|
||||
struct mbfl_split_params {
|
||||
zval *return_value; /* php function return value structure pointer */
|
||||
mbfl_string *result_string; /* string to store result chunk */
|
||||
size_t mb_chunk_length; /* actual chunk length in chars */
|
||||
size_t split_length; /* split length in chars */
|
||||
mbfl_convert_filter *next_filter; /* widechar to encoding converter */
|
||||
zval *return_value; /* php function return value structure pointer */
|
||||
mbfl_string *result_string; /* string to store result chunk */
|
||||
size_t mb_chunk_length; /* actual chunk length in chars */
|
||||
size_t split_length; /* split length in chars */
|
||||
mbfl_convert_filter *next_filter; /* widechar to encoding converter */
|
||||
};
|
||||
|
||||
/* callback function to fill split array */
|
||||
static int mbfl_split_output(int c, void *data)
|
||||
{
|
||||
struct mbfl_split_params *params = (struct mbfl_split_params *)data; /* cast passed data */
|
||||
struct mbfl_split_params *params = (struct mbfl_split_params *)data; /* cast passed data */
|
||||
|
||||
(*params->next_filter->filter_function)(c, params->next_filter); /* decoder filter */
|
||||
(*params->next_filter->filter_function)(c, params->next_filter); /* decoder filter */
|
||||
|
||||
if(params->split_length == ++params->mb_chunk_length) { /* if current chunk size reached defined chunk size or last char reached */
|
||||
mbfl_convert_filter_flush(params->next_filter);/* concatenate separate decoded chars to the solid string */
|
||||
mbfl_memory_device *device = (mbfl_memory_device *)params->next_filter->data; /* chars container */
|
||||
mbfl_string *chunk = params->result_string;
|
||||
mbfl_memory_device_result(device, chunk); /* make chunk */
|
||||
add_next_index_stringl(params->return_value, (const char *)chunk->val, chunk->len); /* add chunk to the array */
|
||||
efree(chunk->val);
|
||||
params->mb_chunk_length = 0; /* reset mb_chunk size */
|
||||
}
|
||||
return 0;
|
||||
if(params->split_length == ++params->mb_chunk_length) { /* if current chunk size reached defined chunk size or last char reached */
|
||||
mbfl_convert_filter_flush(params->next_filter);/* concatenate separate decoded chars to the solid string */
|
||||
mbfl_memory_device *device = (mbfl_memory_device *)params->next_filter->data; /* chars container */
|
||||
mbfl_string *chunk = params->result_string;
|
||||
mbfl_memory_device_result(device, chunk); /* make chunk */
|
||||
add_next_index_stringl(params->return_value, (const char *)chunk->val, chunk->len); /* add chunk to the array */
|
||||
efree(chunk->val);
|
||||
params->mb_chunk_length = 0; /* reset mb_chunk size */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* TODO Document this function on php.net */
|
||||
@ -1951,13 +1958,21 @@ PHP_FUNCTION(mb_strpos)
|
||||
{
|
||||
int reverse = 0;
|
||||
zend_long offset = 0;
|
||||
char *haystack_val, *needle_val;
|
||||
mbfl_string haystack, needle;
|
||||
zend_string *enc_name = NULL;
|
||||
size_t n;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS!", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG(offset)
|
||||
Z_PARAM_STR(enc_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
|
||||
haystack.encoding = needle.encoding = php_mb_get_encoding(enc_name, 4);
|
||||
if (!haystack.encoding) {
|
||||
@ -1978,12 +1993,20 @@ PHP_FUNCTION(mb_strpos)
|
||||
PHP_FUNCTION(mb_strrpos)
|
||||
{
|
||||
mbfl_string haystack, needle;
|
||||
char *haystack_val, *needle_val;
|
||||
zend_string *enc_name = NULL;
|
||||
zend_long offset = 0, n;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS!", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG(offset)
|
||||
Z_PARAM_STR(enc_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
|
||||
haystack.encoding = needle.encoding = php_mb_get_encoding(enc_name, 4);
|
||||
if (!haystack.encoding) {
|
||||
@ -2006,12 +2029,20 @@ PHP_FUNCTION(mb_stripos)
|
||||
size_t n = (size_t) -1;
|
||||
zend_long offset = 0;
|
||||
mbfl_string haystack, needle;
|
||||
char *haystack_val, *needle_val;
|
||||
zend_string *from_encoding = NULL;
|
||||
const mbfl_encoding *enc;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS!", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG(offset)
|
||||
Z_PARAM_STR(from_encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
|
||||
enc = php_mb_get_encoding(from_encoding, 4);
|
||||
if (!enc) {
|
||||
@ -2035,12 +2066,20 @@ PHP_FUNCTION(mb_strripos)
|
||||
size_t n = (size_t) -1;
|
||||
zend_long offset = 0;
|
||||
mbfl_string haystack, needle;
|
||||
char *haystack_val, *needle_val;
|
||||
zend_string *from_encoding = NULL;
|
||||
const mbfl_encoding *enc;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS!", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG(offset)
|
||||
Z_PARAM_STR(from_encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
|
||||
enc = php_mb_get_encoding(from_encoding, 4);
|
||||
if (!enc) {
|
||||
@ -2067,17 +2106,21 @@ static void php_mb_strstr_variants(INTERNAL_FUNCTION_PARAMETERS, unsigned int va
|
||||
{
|
||||
int reverse_mode = 0;
|
||||
size_t n;
|
||||
char *haystack_val, *needle_val;
|
||||
mbfl_string haystack, needle, result, *ret = NULL;
|
||||
zend_string *encoding_name = NULL;
|
||||
zend_bool part = 0;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bS!",
|
||||
(char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len,
|
||||
&part, &encoding_name) == FAILURE
|
||||
) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_BOOL(part)
|
||||
Z_PARAM_STR(encoding_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
haystack.encoding = needle.encoding = php_mb_get_encoding(encoding_name, 4);
|
||||
if (!haystack.encoding) {
|
||||
RETURN_THROWS();
|
||||
@ -2150,11 +2193,18 @@ PHP_FUNCTION(mb_substr_count)
|
||||
{
|
||||
size_t n;
|
||||
mbfl_string haystack, needle;
|
||||
char *haystack_val, *needle_val;
|
||||
zend_string *enc_name = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|S!", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 3)
|
||||
Z_PARAM_STRING(haystack_val, haystack.len)
|
||||
Z_PARAM_STRING(needle_val, needle.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(enc_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
haystack.val = (unsigned char*)haystack_val;
|
||||
needle.val = (unsigned char*)needle_val;
|
||||
|
||||
if (needle.len == 0) {
|
||||
zend_argument_value_error(2, "must not be empty");
|
||||
@ -2187,9 +2237,13 @@ PHP_FUNCTION(mb_substr)
|
||||
zend_bool len_is_null = 1;
|
||||
mbfl_string string, result, *ret;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!S!", &str, &str_len, &from, &len, &len_is_null, &encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 5)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_LONG(from)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG_OR_NULL(len, len_is_null)
|
||||
Z_PARAM_STR(encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.encoding = php_mb_get_encoding(encoding, 4);
|
||||
if (!string.encoding) {
|
||||
@ -2242,14 +2296,20 @@ PHP_FUNCTION(mb_substr)
|
||||
PHP_FUNCTION(mb_strcut)
|
||||
{
|
||||
zend_string *encoding = NULL;
|
||||
char *string_val;
|
||||
zend_long from, len;
|
||||
zend_bool len_is_null = 1;
|
||||
mbfl_string string, result, *ret;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!S", (char **)&string.val, &string.len, &from, &len, &len_is_null, &encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 5)
|
||||
Z_PARAM_STRING(string_val, string.len)
|
||||
Z_PARAM_LONG(from)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG_OR_NULL(len, len_is_null)
|
||||
Z_PARAM_STR(encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.val = (unsigned char*)string_val;
|
||||
string.encoding = php_mb_get_encoding(encoding, 4);
|
||||
if (!string.encoding) {
|
||||
RETURN_THROWS();
|
||||
@ -2297,13 +2357,17 @@ PHP_FUNCTION(mb_strcut)
|
||||
PHP_FUNCTION(mb_strwidth)
|
||||
{
|
||||
size_t n;
|
||||
char *string_val;
|
||||
mbfl_string string;
|
||||
zend_string *enc_name = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!", (char **)&string.val, &string.len, &enc_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 2)
|
||||
Z_PARAM_STRING(string_val, string.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(enc_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.val = (unsigned char*)string_val;
|
||||
string.encoding = php_mb_get_encoding(enc_name, 2);
|
||||
if (!string.encoding) {
|
||||
RETURN_THROWS();
|
||||
@ -2324,9 +2388,14 @@ PHP_FUNCTION(mb_strimwidth)
|
||||
size_t str_len, trimmarker_len;
|
||||
mbfl_string string, result, marker, *ret;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|sS!", &str, &str_len, &from, &width, &trimmarker, &trimmarker_len, &encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(3, 5)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_LONG(from)
|
||||
Z_PARAM_LONG(width)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(trimmarker, trimmarker_len)
|
||||
Z_PARAM_STR(encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.encoding = marker.encoding = php_mb_get_encoding(encoding, 5);
|
||||
if (!string.encoding) {
|
||||
@ -2629,9 +2698,12 @@ PHP_FUNCTION(mb_convert_case)
|
||||
size_t ret_len;
|
||||
const mbfl_encoding *enc;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|S!", &str, &str_len, &case_mode, &from_encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 3)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_LONG(case_mode)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(from_encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
enc = php_mb_get_encoding(from_encoding, 3);
|
||||
if (!enc) {
|
||||
@ -2664,9 +2736,11 @@ PHP_FUNCTION(mb_strtoupper)
|
||||
size_t ret_len;
|
||||
const mbfl_encoding *enc;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!", &str, &str_len, &from_encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 2)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(from_encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
enc = php_mb_get_encoding(from_encoding, 2);
|
||||
if (!enc) {
|
||||
@ -2693,9 +2767,11 @@ PHP_FUNCTION(mb_strtolower)
|
||||
size_t ret_len;
|
||||
const mbfl_encoding *enc;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!", &str, &str_len, &from_encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 2)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(from_encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
enc = php_mb_get_encoding(from_encoding, 2);
|
||||
if (!enc) {
|
||||
@ -2783,14 +2859,11 @@ PHP_FUNCTION(mb_list_encodings)
|
||||
{
|
||||
const mbfl_encoding **encodings;
|
||||
const mbfl_encoding *encoding;
|
||||
int i;
|
||||
int i = 0;
|
||||
|
||||
if (zend_parse_parameters_none() == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_NONE();
|
||||
|
||||
array_init(return_value);
|
||||
i = 0;
|
||||
encodings = mbfl_get_supported_encodings();
|
||||
while ((encoding = encodings[i++]) != NULL) {
|
||||
add_next_index_string(return_value, (char *) encoding->name);
|
||||
@ -2804,9 +2877,9 @@ PHP_FUNCTION(mb_encoding_aliases)
|
||||
const mbfl_encoding *encoding;
|
||||
zend_string *encoding_name = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &encoding_name) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||
Z_PARAM_STR(encoding_name)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
encoding = php_mb_get_encoding(encoding_name, 1);
|
||||
if (!encoding) {
|
||||
@ -2829,7 +2902,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
|
||||
const mbfl_encoding *charset, *transenc;
|
||||
mbfl_string string, result, *ret;
|
||||
zend_string *charset_name = NULL;
|
||||
char *trans_enc_name = NULL;
|
||||
char *trans_enc_name = NULL, *string_val;
|
||||
size_t trans_enc_name_len;
|
||||
char *linefeed = "\r\n";
|
||||
size_t linefeed_len;
|
||||
@ -2837,13 +2910,16 @@ PHP_FUNCTION(mb_encode_mimeheader)
|
||||
|
||||
string.encoding = MBSTRG(current_internal_encoding);
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!s!sl",
|
||||
(char **)&string.val, &string.len, &charset_name, &trans_enc_name, &trans_enc_name_len,
|
||||
&linefeed, &linefeed_len, &indent
|
||||
) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 5)
|
||||
Z_PARAM_STRING(string_val, string.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(charset_name)
|
||||
Z_PARAM_STRING(trans_enc_name, trans_enc_name_len)
|
||||
Z_PARAM_STRING(linefeed, linefeed_len)
|
||||
Z_PARAM_LONG(indent)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.val = (unsigned char*)string_val;
|
||||
charset = &mbfl_encoding_pass;
|
||||
transenc = &mbfl_encoding_base64;
|
||||
|
||||
@ -2880,14 +2956,16 @@ PHP_FUNCTION(mb_encode_mimeheader)
|
||||
/* {{{ Decodes the MIME "encoded-word" in the string */
|
||||
PHP_FUNCTION(mb_decode_mimeheader)
|
||||
{
|
||||
char *string_val;
|
||||
mbfl_string string, result, *ret;
|
||||
|
||||
string.encoding = MBSTRG(current_internal_encoding);
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", (char **)&string.val, &string.len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||
Z_PARAM_STRING(string_val, string.len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.val = (unsigned char*)string_val;
|
||||
mbfl_string_init(&result);
|
||||
ret = mbfl_mime_header_decode(&string, &result, MBSTRG(current_internal_encoding));
|
||||
ZEND_ASSERT(ret != NULL);
|
||||
@ -2902,13 +2980,18 @@ PHP_FUNCTION(mb_convert_kana)
|
||||
{
|
||||
int opt;
|
||||
mbfl_string string, result, *ret;
|
||||
char *optstr = NULL;
|
||||
char *optstr = NULL, *string_val;
|
||||
size_t optstr_len;
|
||||
zend_string *encname = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!S!", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 3)
|
||||
Z_PARAM_STRING(string_val, string.len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(optstr, optstr_len)
|
||||
Z_PARAM_STR(encname)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
string.val = (unsigned char*)string_val;
|
||||
|
||||
/* option */
|
||||
if (optstr != NULL) {
|
||||
@ -3213,13 +3296,20 @@ php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
|
||||
mbfl_string string, result, *ret;
|
||||
|
||||
if (type == 0) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sh|S!b", &str, &str_len, &target_hash, &encoding, &is_hex) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 4)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_ARRAY_HT(target_hash)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(encoding)
|
||||
Z_PARAM_BOOL(is_hex)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
} else {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sh|S!", &str, &str_len, &target_hash, &encoding) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(2, 3)
|
||||
Z_PARAM_STRING(str, str_len)
|
||||
Z_PARAM_ARRAY_HT(target_hash)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STR(encoding)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
}
|
||||
|
||||
string.val = (unsigned char *)str;
|
||||
@ -3506,9 +3596,14 @@ PHP_FUNCTION(mb_send_mail)
|
||||
body_enc = mbfl_no2encoding(lang->mail_body_encoding);
|
||||
}
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sss|z!S!", &to, &to_len, &subject, &subject_len, &message, &message_len, &headers, &extra_cmd) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(3, 5)
|
||||
Z_PARAM_STRING(to, to_len)
|
||||
Z_PARAM_STRING(subject, subject_len)
|
||||
Z_PARAM_STRING(message, message_len)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_ZVAL(headers)
|
||||
Z_PARAM_STR(extra_cmd)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
/* ASCIIZ check */
|
||||
MAIL_ASCIIZ_CHECK_MBSTRING(to, to_len);
|
||||
@ -3752,9 +3847,10 @@ PHP_FUNCTION(mb_get_info)
|
||||
const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
|
||||
const mbfl_encoding **entry;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &typ, &typ_len) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(0, 1)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_STRING(typ, typ_len)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (!typ || !strcasecmp("all", typ)) {
|
||||
array_init(return_value);
|
||||
|
Loading…
Reference in New Issue
Block a user