]> granicus.if.org Git - php/commitdiff
@- Changed WDDX to always serialize arrays as structs. (Andrei)
authorAndrei Zmievski <andrei@php.net>
Fri, 9 Jun 2000 13:50:39 +0000 (13:50 +0000)
committerAndrei Zmievski <andrei@php.net>
Fri, 9 Jun 2000 13:50:39 +0000 (13:50 +0000)
Changed WDDX to always serialize arrays as structs. PR #4924

ext/wddx/wddx.c
main/fopen_wrappers.c

index bcc07eef11e1b183804e7f887136a996542ff846..a0a1e5d62bd5a7b968678ba6f022a891447bd57b 100644 (file)
@@ -385,60 +385,39 @@ static void php_wddx_serialize_hash(wddx_packet *packet, zval *var)
 {
        zval **ent;
        char *key;
-       int hash_type, ent_type;
        ulong idx;
        HashTable *target_hash;
        char tmp_buf[WDDX_BUF_LEN];
 
        target_hash = HASH_OF(var);
+       php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
        
        /* If variable is an object, always use struct and serialize its classname */
        if (var->type == IS_OBJECT) {
-               php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
                sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
                php_wddx_add_chunk(packet, tmp_buf);
                php_wddx_add_chunk_static(packet, WDDX_STRING_S);
                php_wddx_add_chunk_ex(packet, var->value.obj.ce->name, var->value.obj.ce->name_length);
                php_wddx_add_chunk_static(packet, WDDX_STRING_E);
                php_wddx_add_chunk_static(packet, WDDX_VAR_E);
-       } else {
-               zend_hash_internal_pointer_reset(target_hash);
-
-               hash_type = zend_hash_get_current_key(target_hash, &key, &idx); 
-
-               if (hash_type == HASH_KEY_IS_STRING) {
-                       php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-                       efree(key);
-               } else {
-                       sprintf(tmp_buf, WDDX_ARRAY_S, zend_hash_num_elements(target_hash));
-                       php_wddx_add_chunk(packet, tmp_buf);
-               }
        }
 
-       for (;zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
-                 zend_hash_move_forward(target_hash)) {
+       for (zend_hash_internal_pointer_reset(target_hash);
+                zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
+                zend_hash_move_forward(target_hash)) {
                if (*ent == var)
                        continue;
 
-               if (var->type == IS_OBJECT || hash_type == HASH_KEY_IS_STRING) {
-                       ent_type = zend_hash_get_current_key(target_hash, &key, &idx);
-
-                       if (ent_type == HASH_KEY_IS_STRING) {
-                               php_wddx_serialize_var(packet, *ent, key);
-                               efree(key);
-                       } else {
-                               sprintf(tmp_buf, "%ld", idx);
-                               php_wddx_serialize_var(packet, *ent, tmp_buf);
-                       }
-               } else
-                       php_wddx_serialize_var(packet, *ent, NULL);
+               if (zend_hash_get_current_key(target_hash, &key, &idx) == HASH_KEY_IS_STRING) {
+                       php_wddx_serialize_var(packet, *ent, key);
+                       efree(key);
+               } else {
+                       sprintf(tmp_buf, "%ld", idx);
+                       php_wddx_serialize_var(packet, *ent, tmp_buf);
+               }
        }
        
-       if (var->type == IS_OBJECT || hash_type == HASH_KEY_IS_STRING) {
-               php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
-       } else {
-               php_wddx_add_chunk_static(packet, WDDX_ARRAY_E);
-       }
+       php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
 }
 /* }}} */
 
index ae8801ee36d822fba636fe3e407b46eac14e254b..1fad046d102283d986838113566f9ddb7d16a44b 100644 (file)
@@ -987,7 +987,7 @@ static FILE *php_fopen_url_wrapper(const char *path, char *mode, int options, in
        const char *protocol=NULL;
        int n=0;
 
-       for(p=path;isalnum(*p);p++) 
+       for(p=path;isalnum((int)*p);p++) 
                n++;
        if((*p==':')&&(n>1)) {
                protocol=path;