dmitry Fri Oct 28 04:07:20 2005 EDT Modified files: /php-src/ext/spl spl_iterators.c Log: Unicode support http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.92&r2=1.93&ty=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.92 php-src/ext/spl/spl_iterators.c:1.93 --- php-src/ext/spl/spl_iterators.c:1.92 Wed Oct 12 18:52:08 2005 +++ php-src/ext/spl/spl_iterators.c Fri Oct 28 04:07:17 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_iterators.c,v 1.92 2005/10/12 22:52:08 helly Exp $ */ +/* $Id: spl_iterators.c,v 1.93 2005/10/28 08:07:17 dmitry Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -465,10 +465,22 @@ char *str_key; uint str_key_len; ulong int_key; - if (iterator->funcs->get_current_key(iterator, &str_key, &str_key_len, &int_key TSRMLS_CC) == HASH_KEY_IS_LONG) { - RETURN_LONG(int_key); - } else { - RETURN_STRINGL(str_key, str_key_len-1, 0); + + switch (iterator->funcs->get_current_key(iterator, &str_key, &str_key_len, &int_key TSRMLS_CC)) { + case HASH_KEY_IS_LONG: + RETURN_LONG(int_key); + break; + case HASH_KEY_IS_STRING: + RETURN_STRINGL(str_key, str_key_len-1, 0); + break; + case HASH_KEY_IS_UNICODE: + RETURN_UNICODEL(str_key, str_key_len-1, 0); + break; + case HASH_KEY_IS_BINARY: + RETURN_BINARYL(str_key, str_key_len-1, 0); + break; + default: + RETURN_NULL(); } } else { RETURN_NULL(); @@ -1721,6 +1733,10 @@ if (intern->u.caching.flags & CIT_TOSTRING_USE_KEY) { if (intern->current.key_type == HASH_KEY_IS_STRING) { RETURN_STRINGL(intern->current.str_key, intern->current.str_key_len, 1); + } else if (intern->current.key_type == HASH_KEY_IS_UNICODE) { + RETURN_UNICODEL(intern->current.str_key, intern->current.str_key_len, 1); + } else if (intern->current.key_type == HASH_KEY_IS_BINARY) { + RETURN_BINARYL(intern->current.str_key, intern->current.str_key_len, 1); } else { RETVAL_LONG(intern->current.int_key); convert_to_string(return_value); @@ -2029,10 +2045,21 @@ char *str_key; uint str_key_len; ulong int_key; - if (intern->inner.iterator->funcs->get_current_key(intern->inner.iterator, &str_key, &str_key_len, &int_key TSRMLS_CC) == HASH_KEY_IS_LONG) { - RETURN_LONG(int_key); - } else { - RETURN_STRINGL(str_key, str_key_len-1, 0); + switch (intern->inner.iterator->funcs->get_current_key(intern->inner.iterator, &str_key, &str_key_len, &int_key TSRMLS_CC)) { + case HASH_KEY_IS_LONG: + RETURN_LONG(int_key); + break; + case HASH_KEY_IS_STRING: + RETURN_STRINGL(str_key, str_key_len-1, 0); + break; + case HASH_KEY_IS_UNICODE: + RETURN_UNICODEL(str_key, str_key_len-1, 0); + break; + case HASH_KEY_IS_BINARY: + RETURN_BINARYL(str_key, str_key_len-1, 0); + break; + default: + RETURN_NULL(); } } else { RETURN_NULL();
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php