X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/ab0ddec30dcb224d7c4420ca4d71355282babf96..34f9e1d49c0b952ab3042362c54d85520992927f:/glib/alien/callback.c diff --git a/glib/alien/callback.c b/glib/alien/callback.c index 71f0c9c..e9db3ce 100644 --- a/glib/alien/callback.c +++ b/glib/alien/callback.c @@ -16,105 +16,41 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: callback.c,v 1.1 2004-10-27 15:07:27 espen Exp $ */ +/* $Id: callback.c,v 1.3 2004-11-01 00:08:50 espen Exp $ */ #include #ifdef CMUCL #include "lisp.h" -#include "alloc.h" -#include "arch.h" -lispobj callback_trampoline; -lispobj destroy_user_data; +void (*log_handler) (gchar*, guint, gchar*); #endif -void callback_marshal (guint callback_id, GValue *return_value, - guint n_params, const GValue *param_values) -{ -#ifdef CMUCL - funcall3 (callback_trampoline, alloc_number ((unsigned int)callback_id), - alloc_cons (alloc_number (n_params), alloc_sap (param_values)), - alloc_sap (return_value)); -#elif defined(CLISP) - callback_trampoline ((unsigned long)callback_id, - n_params, (unsigned int)param_values, - (unsigned int)return_value); -#endif -} - -void destroy_notify (gpointer data) -{ -#ifdef CMUCL - funcall1 (destroy_user_data, alloc_number ((unsigned long)data)); -#elif defined(CLISP) - destroy_user_data ((unsigned long)data); -#endif -} - -/* #ifndef CMUCL */ -/* void* */ -/* destroy_notify_address () */ -/* { */ -/* return (void*)destroy_notify; */ -/* } */ -/* #endif */ - - - -void closure_callback_marshal (GClosure *closure, - GValue *return_value, - guint n_params, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data) -{ - callback_marshal ((guint)closure->data, return_value, n_params, param_values); -} - -void closure_destroy_notify (gpointer data, GClosure *closure) -{ - destroy_notify (data); -} GClosure* -g_lisp_callback_closure_new (guint callback_id) +clg_callback_closure_new (gpointer callback_id, gpointer callback, + gpointer destroy_notify) { GClosure *closure; closure = g_closure_new_simple (sizeof (GClosure), (gpointer)callback_id); - g_closure_set_marshal (closure, closure_callback_marshal); - g_closure_add_finalize_notifier (closure, (gpointer)callback_id, closure_destroy_notify); + g_closure_set_meta_marshal (closure, callback_id, callback); + g_closure_add_finalize_notifier (closure, callback_id, destroy_notify); return closure; } -gboolean source_callback_marshal (gpointer data) +void +g_logv (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *format, + va_list args1) { - GValue return_value; - - memset (&return_value, 0, sizeof (GValue)); - g_value_init (&return_value, G_TYPE_BOOLEAN); - callback_marshal ((guint)data, &return_value, 0, NULL); + gchar *msg = g_strdup_vprintf (format, args1); + log_handler (log_domain, log_level, msg); - return g_value_get_boolean (&return_value); + /* Normally log_handler won't return, so we will be leaking this memory */ + g_free (msg); } - - - -GEnumValue* -g_enum_class_values (GEnumClass *class, guint *n_values) -{ - *n_values = class->n_values; - return class->values; -} - -GFlagsValue* -g_flags_class_values (GFlagsClass *class, guint *n_values) -{ - *n_values = class->n_values; - return class->values; -} -