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]