cvs: php4 /ext/wddx wddx.c

From: Date: Fri, 23 Jun 2000 17:00:47 +0000
Subject: cvs: php4 /ext/wddx wddx.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-409@lists.php.net to get a copy of this message
sas Fri Jun 23 10:00:47 2000 EDT Modified files: /php4/ext/wddx wddx.c Log: Make use of incomplete class API Index: php4/ext/wddx/wddx.c diff -u php4/ext/wddx/wddx.c:1.47 php4/ext/wddx/wddx.c:1.48 --- php4/ext/wddx/wddx.c:1.47 Wed Jun 21 11:35:53 2000 +++ php4/ext/wddx/wddx.c Fri Jun 23 10:00:47 2000 @@ -27,7 +27,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: wddx.c,v 1.47 2000/06/21 18:35:53 sas Exp $ */ +/* $Id: wddx.c,v 1.48 2000/06/23 17:00:47 sas Exp $ */ #include "php.h" #include "php_wddx.h" @@ -37,6 +37,7 @@ #include "php_wddx_api.h" #define PHP_XML_INTERNAL #include "ext/xml/php_xml.h" +#include "ext/standard/php_incomplete_class.h" #define WDDX_BUF_LEN 256 #define PHP_CLASS_NAME_VAR "php_class_name" @@ -398,13 +399,19 @@ */ if (call_user_function_ex(CG(function_table), obj, fname, &retval, 0, 0, 1, NULL) == SUCCESS) { if (retval && HASH_OF(retval)) { + PHP_CLASS_ATTRIBUTES; + + PHP_SET_CLASS_ATTRIBUTES(obj); + 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, obj->value.obj.ce->name, obj->value.obj.ce->name_length); + php_wddx_add_chunk_ex(packet, class_name, name_len); php_wddx_add_chunk_static(packet, WDDX_STRING_E); php_wddx_add_chunk_static(packet, WDDX_VAR_E); + + PHP_CLEANUP_CLASS_ATTRIBUTES(); for (zend_hash_internal_pointer_reset(HASH_OF(retval)); zend_hash_get_current_data(HASH_OF(retval), (void **)&varname) == SUCCESS; @@ -422,13 +429,20 @@ php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); } } else { + PHP_CLASS_ATTRIBUTES; + + PHP_SET_CLASS_ATTRIBUTES(obj); + 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, obj->value.obj.ce->name, obj->value.obj.ce->name_length); + php_wddx_add_chunk_ex(packet, class_name, name_len); php_wddx_add_chunk_static(packet, WDDX_STRING_E); php_wddx_add_chunk_static(packet, WDDX_VAR_E); + + PHP_CLEANUP_CLASS_ATTRIBUTES(); + for (zend_hash_internal_pointer_reset(HASH_OF(obj)); zend_hash_get_current_data(HASH_OF(obj), (void**)&ent) == SUCCESS; zend_hash_move_forward(HASH_OF(obj))) { @@ -736,11 +750,14 @@ if (ent1->varname) { if (!strcmp(ent1->varname, PHP_CLASS_NAME_VAR) && ent1->data->type == IS_STRING && ent1->data->value.str.len) { + zend_bool incomplete_class = 0; if (zend_hash_find(EG(class_table), ent1->data->value.str.val, ent1->data->value.str.len+1, (void **) &ce)==FAILURE) { - php_error(E_NOTICE, "Deserializing non-existant class: %s! No methods will be available!", ent1->data->value.str.val); - ce = &zend_standard_class_def; + BLS_FETCH(); + + incomplete_class = 1; + ce = PHP_IC_ENTRY_READ; } /* Initialize target object */ @@ -753,6 +770,9 @@ ent2->data->value.ht, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0); + + if (incomplete_class) + php_store_class_name(obj, ent1->data->value.str.val, ent1->data->value.str.len); /* Clean up old array entry */ zval_dtor(ent2->data);

« previous php.cvs (#409) next »