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;
 }