]> granicus.if.org Git - php/commitdiff
Implement OnUpdateUTF8String() handler. It always assumes UTF-8 input,
authorAndrei Zmievski <andrei@php.net>
Fri, 22 Dec 2006 21:38:12 +0000 (21:38 +0000)
committerAndrei Zmievski <andrei@php.net>
Fri, 22 Dec 2006 21:38:12 +0000 (21:38 +0000)
since we cannot check for UG(unicodE) inside it.

Zend/zend_ini.c
Zend/zend_ini.h
unicode-progress.txt

index d46cd9db46177a6f11425f274b34eaaf8b664dbd..3ef92be5f195afd854b1d379cf02aedafe61026a 100644 (file)
@@ -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
index 7234a0be2ed1093050dcae61965578cdbecf1bc0..8dcb0b090786b2964bbb1caba232f3bdb3296f7e 100644 (file)
@@ -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
index c8ba7af02b1e5f2b2d27d78c34d2688ba0133a31..867665eaf3d5884acb570f289d21eb83b0f5d028 100644 (file)
@@ -575,6 +575,7 @@ ext/standard
     implode()
     levenshtein()
     localeconv()
+    metaphone()
     money_format()
     nl_langinfo()
     nl2br()