helly           Wed Mar  8 20:30:12 2006 UTC

  Modified files:              
    /php-src/ext/spl    spl_directory.c spl_directory.h 
  Log:
  - Cloning might need special treatment as well
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_directory.c?r1=1.83&r2=1.84&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.83 
php-src/ext/spl/spl_directory.c:1.84
--- php-src/ext/spl/spl_directory.c:1.83        Wed Mar  8 20:06:16 2006
+++ php-src/ext/spl/spl_directory.c     Wed Mar  8 20:30:12 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.c,v 1.83 2006/03/08 20:06:16 helly Exp $ */
+/* $Id: spl_directory.c,v 1.84 2006/03/08 20:30:12 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -70,8 +70,8 @@
 {
        spl_filesystem_object *intern = (spl_filesystem_object*)object;
 
-       if (intern->oth_dtor) {
-               intern->oth_dtor(intern TSRMLS_CC);
+       if (intern->oth_handler && intern->oth_handler->dtor) {
+               intern->oth_handler->dtor(intern TSRMLS_CC);
        }
        zend_hash_destroy(intern->std.properties);
        FREE_HASHTABLE(intern->std.properties);
@@ -133,7 +133,7 @@
        intern = emalloc(sizeof(spl_filesystem_object));
        memset(intern, 0, sizeof(spl_filesystem_object));
        intern->std.ce = class_type;
-       /* intern->type = SPL_FS_INFO; done by set o */
+       /* intern->type = SPL_FS_INFO; done by set 0 */
        intern->file_class = spl_ce_SplFileObject;
        intern->info_class = spl_ce_SplFileInfo;
        if (obj) *obj = intern;
@@ -273,9 +273,14 @@
        intern->info_class = source->info_class;
        intern->flags = source->flags;
        intern->oth = source->oth;
+       intern->oth_handler = source->oth_handler;
 
        zend_objects_clone_members(new_object, new_obj_val, old_object, handle 
TSRMLS_CC);
 
+       if (intern->oth_handler && intern->oth_handler->clone) {
+               intern->oth_handler->clone(source, intern TSRMLS_CC);
+       }
+
        return new_obj_val;
 }
 /* }}} */
http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_directory.h?r1=1.21&r2=1.22&diff_format=u
Index: php-src/ext/spl/spl_directory.h
diff -u php-src/ext/spl/spl_directory.h:1.21 
php-src/ext/spl/spl_directory.h:1.22
--- php-src/ext/spl/spl_directory.h:1.21        Wed Mar  8 20:06:16 2006
+++ php-src/ext/spl/spl_directory.h     Wed Mar  8 20:30:12 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.h,v 1.21 2006/03/08 20:06:16 helly Exp $ */
+/* $Id: spl_directory.h,v 1.22 2006/03/08 20:30:12 helly Exp $ */
 
 #ifndef SPL_DIRECTORY_H
 #define SPL_DIRECTORY_H
@@ -33,7 +33,7 @@
 PHP_MINIT_FUNCTION(spl_directory);
 
 typedef enum {
-       SPL_FS_INFO,
+       SPL_FS_INFO, /* must be 0 */
        SPL_FS_DIR,
        SPL_FS_FILE,
 } SPL_FS_OBJ_TYPE;
@@ -41,11 +41,17 @@
 typedef struct _spl_filesystem_object  spl_filesystem_object;
 
 typedef void (*spl_foreign_dtor_t)(spl_filesystem_object *object TSRMLS_DC);
+typedef void (*spl_foreign_clone_t)(spl_filesystem_object *src, 
spl_filesystem_object *dst TSRMLS_DC);
+
+typedef struct _spl_other_handler {
+       spl_foreign_dtor_t     dtor;
+       spl_foreign_clone_t    clone;
+} spl_other_handler;
 
 struct _spl_filesystem_object {
        zend_object        std;
        void               *oth;
-       spl_foreign_dtor_t oth_dtor;
+       spl_other_handler  *oth_handler;
        char               *path;
        int                path_len;
        char               *file_name;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to