diff options
| author | Dmitry Stogov <dmitry@php.net> | 2006-02-21 20:12:43 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2006-02-21 20:12:43 +0000 |
| commit | 0f1209ab3d1f9ec0f1ea7295fa987ba4dea270c8 (patch) | |
| tree | f599e4188e236ccf04fa0f74518e6c10bbcb5d14 /ext/session | |
| parent | fca6eecbe944effb6374e63271a008947b266e64 (diff) | |
| download | php-git-0f1209ab3d1f9ec0f1ea7295fa987ba4dea270c8.tar.gz | |
Portable unicode string API:
- use the same type (int) for zval.value.usr.len and zval.value.str.len
- use union "zstr" as char*/UChar* mixture instead of void*
- Z_UNISTR() and Z_UNILEN() no longer check for Z_TYPE()
- nuke int32_t from ZE (not finisned)
Diffstat (limited to 'ext/session')
| -rw-r--r-- | ext/session/php_session.h | 4 | ||||
| -rw-r--r-- | ext/session/session.c | 22 |
2 files changed, 14 insertions, 12 deletions
diff --git a/ext/session/php_session.h b/ext/session/php_session.h index bc3dbcbf7e..f2b70d4ed7 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -211,7 +211,7 @@ PHPAPI void php_session_start(TSRMLS_D); #define PS_ENCODE_VARS \ - char *key; \ + zstr key; \ uint key_length; \ ulong num_key; \ zval **struc; @@ -223,7 +223,7 @@ PHPAPI void php_session_start(TSRMLS_D); zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \ zend_hash_move_forward(_ht)) { \ key_length--; \ - if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \ + if (php_get_session_var(key.s, key_length, &struc TSRMLS_CC) == SUCCESS) { \ code; \ } \ } \ diff --git a/ext/session/session.c b/ext/session/session.c index 04402cbb16..0e8f7a3ed1 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -401,13 +401,13 @@ PS_SERIALIZER_ENCODE_FUNC(php_binary) PS_ENCODE_LOOP( if (key_length > PS_BIN_MAX) continue; smart_str_appendc(&buf, (unsigned char) key_length); - smart_str_appendl(&buf, key, key_length); + smart_str_appendl(&buf, key.s, key_length); php_var_serialize(&buf, struc, &var_hash TSRMLS_CC); } else { if (key_length > PS_BIN_MAX) continue; smart_str_appendc(&buf, (unsigned char) (key_length & PS_BIN_UNDEF)); - smart_str_appendl(&buf, key, key_length); + smart_str_appendl(&buf, key.s, key_length); ); if (newlen) *newlen = buf.len; @@ -465,8 +465,8 @@ PS_SERIALIZER_ENCODE_FUNC(php) PHP_VAR_SERIALIZE_INIT(var_hash); PS_ENCODE_LOOP( - smart_str_appendl(&buf, key, (unsigned char) key_length); - if (memchr(key, PS_DELIMITER, key_length)) { + smart_str_appendl(&buf, key.s, (unsigned char) key_length); + if (memchr(key.s, PS_DELIMITER, key_length)) { PHP_VAR_SERIALIZE_DESTROY(var_hash); smart_str_free(&buf); return FAILURE; @@ -476,7 +476,7 @@ PS_SERIALIZER_ENCODE_FUNC(php) php_var_serialize(&buf, struc, &var_hash TSRMLS_CC); } else { smart_str_appendc(&buf, PS_UNDEF_MARKER); - smart_str_appendl(&buf, key, key_length); + smart_str_appendl(&buf, key.s, key_length); smart_str_appendc(&buf, PS_DELIMITER); ); @@ -775,7 +775,7 @@ static void php_session_initialize(TSRMLS_D) static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC) { - char *str; + zstr str; uint str_len; ulong num_key; int n; @@ -786,10 +786,12 @@ static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC) switch (n) { case HASH_KEY_IS_STRING: - if (zend_hash_find(&EG(symbol_table), str, str_len, + case HASH_KEY_IS_UNICODE: + if (zend_u_hash_find(&EG(symbol_table), n, str, str_len, (void **) &val) == SUCCESS && val && Z_TYPE_PP(val) != IS_NULL) { - ZEND_SET_SYMBOL_WITH_LENGTH(ht, str, str_len, *val, + /* FIXME: Unicode support??? */ + ZEND_SET_SYMBOL_WITH_LENGTH(ht, str.s, str_len, *val, (*val)->refcount + 1 , 1); ret = 1; } @@ -1725,7 +1727,7 @@ PHP_FUNCTION(session_unset) if (PG(register_globals)) { uint str_len; - char *str; + zstr str; ulong num_key; HashPosition pos; @@ -1733,7 +1735,7 @@ PHP_FUNCTION(session_unset) while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key, 0, &pos) == HASH_KEY_IS_STRING) { - zend_delete_global_variable(str, str_len-1 TSRMLS_CC); + zend_delete_global_variable(str.s, str_len-1 TSRMLS_CC); zend_hash_move_forward_ex(ht, &pos); } } |
