Mercurial > pidgin.yaz
diff plugins/mono/loader/mono-helper.c @ 11980:67fbd2ff4c4e
[gaim-migrate @ 14273]
Mono cleanup patch from Eoin Coffey
First, I changed mono_loader_ to ml_, since I was
getting sick of typing mono_loader_ :-D
Moved the mono runtime init and deinit code out of
mono.c into ml_init and ml_uninit in mono-helper.c
Added api/Status.cs and loader/status-glue.c so the
.net api now knows very little (as in the 'id') of
statuses.
committer: Tailor Script <tailor@pidgin.im>
author | Gary Kramlich <grim@reaperworld.com> |
---|---|
date | Sat, 05 Nov 2005 02:09:30 +0000 |
parents | 565d2e437c04 |
children | ecd33ffb0b0a |
line wrap: on
line diff
--- a/plugins/mono/loader/mono-helper.c Sat Nov 05 01:57:00 2005 +0000 +++ b/plugins/mono/loader/mono-helper.c Sat Nov 05 02:09:30 2005 +0000 @@ -17,7 +17,42 @@ #include "value.h" #include "debug.h" -MonoObject* mono_loader_delegate_invoke(MonoObject *method, void **params) +static gboolean _runtime_active = FALSE; + +gboolean ml_init() +{ + MonoDomain *d; + + g_return_val_if_fail(_runtime_active == FALSE, TRUE); + + d = mono_jit_init("gaim"); + + if (!d) { + ml_set_domain(NULL); + return FALSE; + } + + ml_set_domain(d); + + ml_init_internal_calls(); + + _runtime_active = TRUE; + + return TRUE; +} + +void ml_uninit() +{ + g_return_if_fail(_runtime_active == TRUE); + + mono_jit_cleanup(ml_get_domain()); + + ml_set_domain(NULL); + + _runtime_active = FALSE; +} + +MonoObject* ml_delegate_invoke(MonoObject *method, void **params) { MonoObject *ret, *exception; @@ -29,7 +64,7 @@ return ret; } -MonoObject* mono_loader_invoke(MonoMethod *method, void *obj, void **params) +MonoObject* ml_invoke(MonoMethod *method, void *obj, void **params) { MonoObject *ret, *exception; @@ -41,7 +76,7 @@ return ret; } -MonoClass* mono_loader_find_plugin_class(MonoImage *image) +MonoClass* ml_find_plugin_class(MonoImage *image) { MonoClass *klass, *pklass = NULL; int i, total; @@ -58,7 +93,7 @@ return NULL; } -void mono_loader_set_prop_string(MonoObject *obj, char *field, char *data) +void ml_set_prop_string(MonoObject *obj, char *field, char *data) { MonoClass *klass; MonoProperty *prop; @@ -69,14 +104,14 @@ prop = mono_class_get_property_from_name(klass, field); - str = mono_string_new(mono_loader_get_domain(), data); + str = mono_string_new(ml_get_domain(), data); args[0] = str; mono_property_set_value(prop, obj, args, NULL); } -gchar* mono_loader_get_prop_string(MonoObject *obj, char *field) +gchar* ml_get_prop_string(MonoObject *obj, char *field) { MonoClass *klass; MonoProperty *prop; @@ -91,7 +126,7 @@ return mono_string_to_utf8(str); } -gboolean mono_loader_is_api_dll(MonoImage *image) +gboolean ml_is_api_dll(MonoImage *image) { MonoClass *klass; int i, total; @@ -101,7 +136,7 @@ klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | i); if (strcmp(mono_class_get_name(klass), "Debug") == 0) if (strcmp(mono_class_get_namespace(klass), "Gaim") == 0) { - mono_loader_set_api_image(image); + ml_set_api_image(image); return TRUE; } } @@ -109,12 +144,12 @@ return FALSE; } -MonoObject* mono_loader_object_from_gaim_type(GaimType type, gpointer data) +MonoObject* ml_object_from_gaim_type(GaimType type, gpointer data) { return NULL; } -MonoObject* mono_loader_object_from_gaim_subtype(GaimSubType type, gpointer data) +MonoObject* ml_object_from_gaim_subtype(GaimSubType type, gpointer data) { MonoObject *obj = NULL; @@ -122,6 +157,9 @@ case GAIM_SUBTYPE_BLIST_BUDDY: obj = gaim_blist_build_buddy_object(data); break; + case GAIM_SUBTYPE_STATUS: + obj = gaim_status_build_status_object(data); + break; default: break; } @@ -131,38 +169,43 @@ static MonoDomain *_domain = NULL; -MonoDomain* mono_loader_get_domain(void) +MonoDomain* ml_get_domain(void) { return _domain; } -void mono_loader_set_domain(MonoDomain *d) +void ml_set_domain(MonoDomain *d) { _domain = d; } static MonoImage *_api_image = NULL; -void mono_loader_set_api_image(MonoImage *image) +void ml_set_api_image(MonoImage *image) { _api_image = image; } -MonoImage* mono_loader_get_api_image() +MonoImage* ml_get_api_image() { return _api_image; } -void mono_loader_init_internal_calls(void) +void ml_init_internal_calls(void) { mono_add_internal_call("Gaim.Debug::_debug", gaim_debug_glue); mono_add_internal_call("Gaim.Signal::_connect", gaim_signal_connect_glue); mono_add_internal_call("Gaim.BuddyList::_get_handle", gaim_blist_get_handle_glue); } +void ml_destroy_signal_data(gpointer data, gpointer user_data) +{ + g_free(data); +} + static GHashTable *plugins_hash = NULL; -void mono_loader_add_plugin(GaimMonoPlugin *plugin) +void ml_add_plugin(GaimMonoPlugin *plugin) { if (!plugins_hash) plugins_hash = g_hash_table_new(NULL, NULL); @@ -170,22 +213,22 @@ g_hash_table_insert(plugins_hash, plugin->klass, plugin); } -gboolean mono_loader_remove_plugin(GaimMonoPlugin *plugin) +gboolean ml_remove_plugin(GaimMonoPlugin *plugin) { return g_hash_table_remove(plugins_hash, plugin->klass); } -gpointer mono_loader_find_plugin(GaimMonoPlugin *plugin) +gpointer ml_find_plugin(GaimMonoPlugin *plugin) { return g_hash_table_lookup(plugins_hash, plugin->klass); } -gpointer mono_loader_find_plugin_by_class(MonoClass *klass) +gpointer ml_find_plugin_by_class(MonoClass *klass) { return g_hash_table_lookup(plugins_hash, klass); } -GHashTable* mono_loader_get_plugin_hash() +GHashTable* ml_get_plugin_hash() { return plugins_hash; }