From 93b9c779f3ee18795a698f276bf1cea7465969c9 Mon Sep 17 00:00:00 2001 From: Andrei Zmievski Date: Fri, 22 Dec 2006 21:38:12 +0000 Subject: [PATCH] Implement OnUpdateUTF8String() handler. It always assumes UTF-8 input, since we cannot check for UG(unicodE) inside it. --- Zend/zend_ini.c | 40 ++++++++++++++++++++++++++++++++++++++++ Zend/zend_ini.h | 1 + unicode-progress.txt | 1 + 3 files changed, 42 insertions(+) diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index d46cd9db46..3ef92be5f1 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -589,6 +589,46 @@ ZEND_API ZEND_INI_MH(OnUpdateStringUnempty) return SUCCESS; } +ZEND_API ZEND_INI_MH(OnUpdateUTF8String) +{ + UChar **p; + UChar *ustr = NULL; + int32_t ustr_len, capacity; + UErrorCode status = U_ZERO_ERROR; +#ifndef ZTS + char *base = (char *) mh_arg2; +#else + char *base; + + base = (char *) ts_resource(*((int *) mh_arg2)); +#endif + + /* estimate capacity */ + capacity = (new_value_length > 2) ? ((new_value_length >> 1) + (new_value_length >> 3) + 2) : new_value_length; + + while (1) { + ustr = eurealloc(ustr, capacity+1); + u_strFromUTF8(ustr, capacity, &ustr_len, new_value, new_value_length, &status); + if (status == U_BUFFER_OVERFLOW_ERROR) { + capacity = ustr_len; + status = U_ZERO_ERROR; + } else { + break; + } + } + + if (U_FAILURE(status)) { + zend_error(E_WARNING, "Could not convert UTF-8 INI value to Unicode"); + efree(ustr); + return FAILURE; + } + + p = (UChar **) (base+(size_t) mh_arg1); + + *p = ustr; + return SUCCESS; +} + /* * Local variables: * tab-width: 4 diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index 7234a0be2e..8dcb0b0907 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -178,6 +178,7 @@ ZEND_API ZEND_INI_MH(OnUpdateLong); ZEND_API ZEND_INI_MH(OnUpdateReal); ZEND_API ZEND_INI_MH(OnUpdateString); ZEND_API ZEND_INI_MH(OnUpdateStringUnempty); +ZEND_API ZEND_INI_MH(OnUpdateUTF8String); END_EXTERN_C() #define ZEND_INI_DISPLAY_ORIG 1 diff --git a/unicode-progress.txt b/unicode-progress.txt index c8ba7af02b..867665eaf3 100644 --- a/unicode-progress.txt +++ b/unicode-progress.txt @@ -575,6 +575,7 @@ ext/standard implode() levenshtein() localeconv() + metaphone() money_format() nl_langinfo() nl2br() -- 2.50.1