comparison src/plugin.c @ 10479:12460aa2c820

[gaim-migrate @ 11766] grim made me do it committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Thu, 06 Jan 2005 06:16:50 +0000
parents 61ef9a964574
children 1a97d5e88d12
comparison
equal deleted inserted replaced
10478:d497f3a2686f 10479:12460aa2c820
31 #include "version.h" 31 #include "version.h"
32 32
33 #ifdef _WIN32 33 #ifdef _WIN32
34 # define PLUGIN_EXT ".dll" 34 # define PLUGIN_EXT ".dll"
35 #else 35 #else
36 #ifdef __hpux 36 # ifdef __hpux
37 # define PLUGIN_EXT ".sl" 37 # define PLUGIN_EXT ".sl"
38 #else 38 # else
39 # define PLUGIN_EXT ".so" 39 # define PLUGIN_EXT ".so"
40 #endif 40 # endif
41 #endif 41 #endif
42 42
43 typedef struct 43 typedef struct
44 { 44 {
45 GHashTable *commands; 45 GHashTable *commands;
69 static void *probe_cb_data = NULL; 69 static void *probe_cb_data = NULL;
70 static void (*load_cb)(GaimPlugin *, void *) = NULL; 70 static void (*load_cb)(GaimPlugin *, void *) = NULL;
71 static void *load_cb_data = NULL; 71 static void *load_cb_data = NULL;
72 static void (*unload_cb)(GaimPlugin *, void *) = NULL; 72 static void (*unload_cb)(GaimPlugin *, void *) = NULL;
73 static void *unload_cb_data = NULL; 73 static void *unload_cb_data = NULL;
74
75
76 void *
77 gaim_plugins_get_handle(void)
78 {
79 static int handle;
80
81 return &handle;
82 }
83
84 74
85 #ifdef GAIM_PLUGINS 75 #ifdef GAIM_PLUGINS
86 static gboolean 76 static gboolean
87 has_file_extension(const char *filename, const char *ext) 77 has_file_extension(const char *filename, const char *ext)
88 { 78 {
784 return ret_value; 774 return ret_value;
785 } 775 }
786 776
787 /************************************************************************** 777 /**************************************************************************
788 * Plugins subsystem 778 * Plugins subsystem
779 **************************************************************************/
780 void *
781 gaim_plugins_get_handle(void) {
782 static int handle;
783
784 return &handle;
785 }
786
787 void
788 gaim_plugins_init(void) {
789 void *handle = gaim_plugins_get_handle();
790
791 gaim_signal_register(handle, "plugin-load",
792 gaim_marshal_VOID__POINTER,
793 NULL, 1,
794 gaim_value_new(GAIM_TYPE_SUBTYPE,
795 GAIM_SUBTYPE_PLUGIN));
796 gaim_signal_register(handle, "plugin-unload",
797 gaim_marshal_VOID__POINTER,
798 NULL, 1,
799 gaim_value_new(GAIM_TYPE_SUBTYPE,
800 GAIM_SUBTYPE_PLUGIN));
801 }
802
803 void
804 gaim_plugins_uninit(void) {
805 gaim_signals_disconnect_by_handle(gaim_plugins_get_handle());
806 }
807
808 /**************************************************************************
809 * Plugins API
789 **************************************************************************/ 810 **************************************************************************/
790 void 811 void
791 gaim_plugins_add_search_path(const char *path) 812 gaim_plugins_add_search_path(const char *path)
792 { 813 {
793 g_return_if_fail(path != NULL); 814 g_return_if_fail(path != NULL);
869 gchar *path; 890 gchar *path;
870 GaimPlugin *plugin; 891 GaimPlugin *plugin;
871 GList *cur; 892 GList *cur;
872 const char *search_path; 893 const char *search_path;
873 894
874 void *handle;
875
876 if (!g_module_supported()) 895 if (!g_module_supported())
877 return; 896 return;
878
879 handle = gaim_plugins_get_handle();
880
881 /* TODO: These signals need to be registered in an init function */
882 gaim_debug_info("plugins", "registering plugin-load signal\n");
883 gaim_signal_register(handle, "plugin-load", gaim_marshal_VOID__POINTER, NULL,
884 1, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_PLUGIN));
885
886 gaim_debug_info("plugins", "registering plugin-unload signal\n");
887 gaim_signal_register(handle, "plugin-unload", gaim_marshal_VOID__POINTER, NULL,
888 1, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_PLUGIN));
889
890 897
891 /* Probe plugins */ 898 /* Probe plugins */
892 for (cur = search_paths; cur != NULL; cur = cur->next) 899 for (cur = search_paths; cur != NULL; cur = cur->next)
893 { 900 {
894 search_path = cur->data; 901 search_path = cur->data;