Dmitry Stogov wrote:
dmitry Mon Feb 13 10:24:00 2006 UTC
--- ZendEngine2/zend_hash.c:1.129 Mon Feb 6 20:36:51 2006
+++ ZendEngine2/zend_hash.c Mon Feb 13 10:23:57 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_hash.c,v 1.129 2006/02/06 20:36:51 tony2001 Exp $ */
+/* $Id: zend_hash.c,v 1.130 2006/02/13 10:23:57 dmitry Exp $ */
#include "zend.h"
#include "zend_operators.h"
@@ -49,16 +49,16 @@
#define UNICODE_KEY(ht, type, arKey, nKeyLength, tmp) \
if (ht->unicode && type == IS_STRING) { \
- UErrorCode status = U_ZERO_ERROR; \
+ UErrorCode status = U_ZERO_ERROR; \
UChar *u = NULL; \
int32_t u_len; \
TSRMLS_FETCH(); \
zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)),
&u, &u_len, (char*)arKey, nKeyLength-1, &status); \
- if (U_FAILURE(status)) { \
+ if (U_FAILURE(status)) { \
/* UTODO: */ \
- } \
- type = IS_UNICODE; \
- tmp = arKey = u; \
+ } \
+ type = IS_UNICODE; \
+ tmp = arKey = u; \
}
@@ -1781,6 +1781,57 @@
p = p->pListLast;
}
}
+
+ZEND_API void zend_hash_to_unicode(HashTable *ht, apply_func_t apply_func
TSRMLS_DC)
+{
+ Bucket **p;
+ uint nIndex;
+
+ IS_CONSISTENT(ht);
+ if (ht->unicode) {
+ return;
+ }
+
+ ht->unicode = 1;
+ memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *));
+ p = &ht->pListHead;
+ while ((*p) != NULL) {
+ if ((*p)->key.type == IS_STRING) {
+ UErrorCode status = U_ZERO_ERROR;
+ UChar *u = NULL;
+ int32_t u_len;
+ Bucket *q;
+
+ zend_convert_to_unicode(ZEND_U_CONVERTER(UG(runtime_encoding_conv)),
&u, &u_len, (char*)(*p)->key.u.string, (*p)->nKeyLength-1, &status);
+
+ q = (Bucket *)
pemalloc(sizeof(Bucket)-sizeof(q->key.u)+((u_len+1)*2), ht->persistent);
+ memcpy(q, *p, sizeof(Bucket)-sizeof(q->key.u));
+ memcpy(q->key.u.unicode, u, (u_len+1)*2);
+ q->key.type = IS_UNICODE;
+ q->nKeyLength = u_len+1;
+ q->h = zend_u_inline_hash_func(IS_UNICODE,
(void*)q->key.u.unicode, q->nKeyLength);
+ if ((*p)->pData == &(*p)->pDataPtr) {
+ q->pData = &q->pDataPtr;
+ }
+ efree(u);
+ pefree(*p, ht->persistent);
+ *p = q;
+ if (q->pListNext) {
+ q->pListNext->pListLast = q;
+ } else {
+ ht->pListTail = q;
+ }
+ }
+ nIndex = (*p)->h & ht->nTableMask;
+ CONNECT_TO_BUCKET_DLLIST(*p, ht->arBuckets[nIndex]);
+ ht->arBuckets[nIndex] = *p;
+ if (apply_func) {
+ apply_func((*p)->pData TSRMLS_CC);
+ }
+ p = &(*p)->pListNext;
+ }
+}
+
#endif
Hi, ^^^^^ above endif is misplaced, and prevents build without --enable-debug.
Regards,
--
Michael - <mike(@)php.net> http://dev.iworks.at/ext-http/http-functions.html.gz
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php