Seems fine to me. Sara?
-Andrei
http://10fathoms.org/vu - daily photoblog
On Oct 16, 2007, at 1:33 PM, Christopher Jones wrote:
With thanks to Sara we looked at OnUpdateUTF8String to access a
php.ini value in OCI8 in PHP 6.
One of our engineers sent me a proposed patch for zend_ini.c in PHP6
to allow OnUpdateUTF8String to work as he thought it should. Any
comments?
Chris
The problems I faced when unicode.semantics=On were:
1) Any OnUpdateUTF8String php.ini variable is seen as NULL in
oci_globals.
2) If the above is resolved, the memory of the variable is wiped
out,
by the time we come to execution of the script, after module inits.
3) We still convert to UTF-16 when unicode.semantics=Off.
PS. Patch is attached - if it gets through.
--
Christopher Jones, Oracle
Email: [EMAIL PROTECTED]Tel: +1 650 506 8630
Blog: http://blogs.oracle.com/opal/ Free PHP Book: http://
tinyurl.com/f8jad
--- zend_ini.c 2007-10-02 11:07:32.0 -0700
+++ zend_ini.c.new 2007-10-16 13:20:03.0 -0700
@@ -640,7 +640,8 @@
ZEND_API ZEND_INI_MH(OnUpdateUTF8String) /* {{{ */
{
- UChar **p;
+ UChar **up;
+ char **p;
UChar *ustr = NULL;
int32_t ustr_len, capacity;
UErrorCode status = U_ZERO_ERROR;
@@ -651,30 +652,37 @@
base = (char *) ts_resource(*((int *) mh_arg2));
#endif
+ /* Convert only if unicode semantics is on. Otherwise, same as
OnUpdateString */
+ if (UG(unicode)){
+ /* estimate capacity */
+ capacity = (new_value_length 2) ? ((new_value_length 1) +
(new_value_length 3) + 2) : new_value_length;
+
+ while (1) {
+ ustr = peurealloc(ustr, capacity+1, 1);
+ u_strFromUTF8(ustr, capacity+1, ustr_len, new_value,
new_value_length, status);
+ if (status == U_BUFFER_OVERFLOW_ERROR || status ==
U_STRING_NOT_TERMINATED_WARNING) {
+ capacity = ustr_len;
+ status = U_ZERO_ERROR;
+ } else {
+ break;
+ }
+ }
- /* 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;
}
- }
- if (U_FAILURE(status)) {
- zend_error(E_WARNING, Could not convert UTF-8 INI value to
Unicode);
- efree(ustr);
- return FAILURE;
- }
+ up = (UChar **) (base+(size_t) mh_arg1);
- p = (UChar **) (base+(size_t) mh_arg1);
+ *up = ustr;
+ }
+ else { /* Same as OnUpdateString */
+ p = (char **) (base+(size_t) mh_arg1);
- *p = ustr;
+ *p = new_value;
+ }
return SUCCESS;
}
/* }}} */
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php