]> granicus.if.org Git - php/commitdiff
fix Timezone class too
authorAntony Dovgal <tony2001@php.net>
Sat, 26 Nov 2005 12:35:27 +0000 (12:35 +0000)
committerAntony Dovgal <tony2001@php.net>
Sat, 26 Nov 2005 12:35:27 +0000 (12:35 +0000)
ext/date/php_date.c

index 44e7cd9f94f078dc209c9c73f48e6f363c1f0a3c..9c102c76adaf5d2edf70482dce297f5834ac5c3e 100644 (file)
@@ -1058,11 +1058,16 @@ static zend_object_value date_object_new_timezone(zend_class_entry *class_type T
 {
        php_timezone_obj *intern;
        zend_object_value retval;
+       zval *tmp;
 
        intern = emalloc(sizeof(php_timezone_obj));
        memset(intern, 0, sizeof(php_timezone_obj));
        intern->std.ce = class_type;
 
+       ALLOC_HASHTABLE(intern->std.properties);
+       zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
+       zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+       
        retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_timezone, NULL TSRMLS_CC);
        retval.handlers = &date_object_handlers_timezone;
        
@@ -1091,6 +1096,14 @@ static void date_object_free_storage_date(void *object TSRMLS_DC)
 
 static void date_object_free_storage_timezone(void *object TSRMLS_DC)
 {
+       php_date_obj *intern = (php_date_obj *)object;
+       
+       if (intern->std.properties) {
+               zend_hash_destroy(intern->std.properties);
+               efree(intern->std.properties);
+               intern->std.properties = NULL;
+       }
+       
        efree(object);
 }