davidg          Tue Mar  6 09:56:17 2001 EDT

  Modified files:              
    /php4/ext/midgard   mgd_internal.h midgard.c 
  Log:
  added ability to break tree walking
  
  
Index: php4/ext/midgard/mgd_internal.h
diff -u php4/ext/midgard/mgd_internal.h:1.8 php4/ext/midgard/mgd_internal.h:1.9
--- php4/ext/midgard/mgd_internal.h:1.8 Tue Feb 27 17:00:31 2001
+++ php4/ext/midgard/mgd_internal.h     Tue Mar  6 09:56:17 2001
@@ -1,4 +1,4 @@
-/* $Id: mgd_internal.h,v 1.8 2001/02/28 01:00:31 davidg Exp $
+/* $Id: mgd_internal.h,v 1.9 2001/03/06 17:56:17 davidg Exp $
 Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
 Copyright (C) 2000 The Midgard Project ry
 Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -112,7 +112,7 @@
    PHP_UPDATE_REPLIGARD(#roottable, (*root)->value.lval); \
 }
 
-void midgard_user_call_func(midgard *mgd, int id, int level, void * xparam);
+int midgard_user_call_func(midgard *mgd, int id, int level, void * xparam);
 
 #define MGD_WALK_FUNCTION(table) \
                                                        MGD_WALK_FUNCTION_EX(table, 
table, up)
@@ -162,13 +162,14 @@
 \
        xp[0] = (*xparam); \
        xp[1] = (*midgard_user_call_func_name); \
-       mgd_walk_table_tree(mgd_handle(), #table, #upfield, (*id)->value.lval, \
+       RETVAL_LONG( \
+               mgd_walk_table_tree(mgd_handle(), #table, #upfield, (*id)->value.lval, 
+\
                                                                           
(*level)->value.lval, \
                                                                           order ? 
(*order)->value.lval : 1, \
                                                                           (void *)xp, 
\
                                                                           
midgard_user_call_func, \
-                                                                          sort ? 
(*sort)->value.str.val : NULL); \
-       RETURN_TRUE; \
+                                                                          sort ? 
+(*sort)->value.str.val : NULL) \
+       ); \
 } \
 \
 /* }}} */
Index: php4/ext/midgard/midgard.c
diff -u php4/ext/midgard/midgard.c:1.20 php4/ext/midgard/midgard.c:1.21
--- php4/ext/midgard/midgard.c:1.20     Tue Feb 27 17:00:32 2001
+++ php4/ext/midgard/midgard.c  Tue Mar  6 09:56:17 2001
@@ -1,4 +1,4 @@
-/* $Id: midgard.c,v 1.20 2001/02/28 01:00:32 davidg Exp $
+/* $Id: midgard.c,v 1.21 2001/03/06 17:56:17 davidg Exp $
 Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
 Copyright (C) 2000 The Midgard Project ry
 Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -745,16 +745,17 @@
        }
 }
 
-void midgard_user_call_func(midgard *mgd, int id, int level, void *xparam)
+int midgard_user_call_func(midgard *mgd, int id, int level, void *xparam)
 {
        zval *args[3];
        zval ** xp = (zval **)xparam;
        zval *return_value;
+       int retval;
 
        if(!PZVAL_IS_REF(xp[0])) {
                /* DG: Do we force the user to pass it by reference ? */
                php_error(E_WARNING,"You must pass the fourth parameter by 
reference.");
-               return;
+               return 0;
        }
        ALLOC_ZVAL(return_value);       ZVAL_NULL(return_value);
        ALLOC_ZVAL(args[0]);            ZVAL_LONG(args[0], id);
@@ -768,11 +769,17 @@
                                  (xp[1])->value.str.val);
                zval_dtor(return_value);
                zval_dtor(args[0]); zval_dtor(args[1]);
-               return;
+               return 0;
        }
-
+       if(return_value->type == IS_NULL)
+               retval = 1;
+       else {
+               convert_to_long_ex(&return_value);
+               retval = return_value->value.lval;
+       }
        zval_dtor(return_value);
        zval_dtor(args[0]); zval_dtor(args[1]);
+       return retval;
 }
 
 #if YOU_WANT_TO_TEST
@@ -826,15 +833,17 @@
 
        xp[0] = (*xparam);
        xp[1] = (*midgard_user_call_func_name);
-       mgd_walk_table_tree(mgd_handle(), mgd_table_name[(*tableid)->value.lval],
+       RETVAL_LONG(
+               mgd_walk_table_tree(mgd_handle(),
+                               mgd_table_name[(*tableid)->value.lval],
                                                                        
(*upfield)->value.str.val,
                                                                        
(*id)->value.lval,
                                                                        
(*level)->value.lval,
                                                                        order ? 
(*order)->value.lval : 1,
                                                                        (void *)xp,
                                                                        
midgard_user_call_func,
-                                                                       sort ? 
(*sort)->value.str.val : NULL);
-       RETURN_TRUE;
+                                                                       sort ? 
+(*sort)->value.str.val : NULL)
+       );
 }
 #endif /* YOU_WANT_TO_TEST */
 #endif /* HAVE_MIDGARD */



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to