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]