diff options
author | Yasuo Ohgaki <yohgaki@php.net> | 2002-07-28 09:44:18 +0000 |
---|---|---|
committer | Yasuo Ohgaki <yohgaki@php.net> | 2002-07-28 09:44:18 +0000 |
commit | 154fe2b566335f5ed26e214d914127468a32c7a8 (patch) | |
tree | 02d23613536d55617307650645fa1764b5c6fd3a | |
parent | 261c2ac79a77ffc16f8cfb160fb0331a49ad4096 (diff) | |
download | php-git-154fe2b566335f5ed26e214d914127468a32c7a8.tar.gz |
MFH
-rw-r--r-- | ext/mbstring/mbstring.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 657ed6d6b3..71c06126b5 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -993,7 +993,7 @@ PHP_FUNCTION(mb_preferred_mime_name) static void php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC) { - char *var, *val; + char *var, *val, *s1, *s2; char *strtok_buf = NULL, **val_list; zval *array_ptr = (zval *) arg; int n, num, val_len, *len_list, *elist, elistsz; @@ -1010,17 +1010,18 @@ php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC) return; } - /* count the variables contained in the query */ + /* count the variables(separators) contained in the "res". + * separator may contain multiple separator chars. + * separaror chars are set in php.ini (arg_separator.input) + */ num = 1; - var = res; - n = strlen(separator); - - while (var=strstr(var, separator)) { - num++; - var+=n; - } - - num *= 2; + for (s1=res; *s1 != '\0'; s1++) + for (s2=separator; *s2 != '\0'; s2++) + if (*s1 == *s2) + num++; + + num *= 2; /* need space for variable name and value */ + val_list = (char **)ecalloc(num, sizeof(char *)); len_list = (int *)ecalloc(num, sizeof(int)); @@ -1028,28 +1029,24 @@ php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC) n = 0; strtok_buf = NULL; var = php_strtok_r(res, separator, &strtok_buf); - - while (var && n < num) { + while (var) { val = strchr(var, '='); + val_list[n] = var; + len_list[n] = php_url_decode(var, strlen(var)); + n++; if (val) { /* have a value */ *val++ = '\0'; - val_list[n] = var; - len_list[n] = php_url_decode(var, strlen(var)); - n++; val_list[n] = val; len_list[n] = php_url_decode(val, strlen(val)); } else { - val_list[n] = var; - len_list[n] = php_url_decode(var, strlen(var)); - n++; val_list[n] = NULL; len_list[n] = 0; } n++; var = php_strtok_r(NULL, separator, &strtok_buf); - } - num = n; - + } + num = n; /* make sure to process initilized vars only */ + /* initialize converter */ to_encoding = MBSTRG(current_internal_encoding); elist = MBSTRG(http_input_list); |