2 * gmodule.c: dl* functions, glib style
5 * Gonzalo Paniagua Javier (gonzalo@novell.com)
7 * (C) 2006 Novell, Inc.
9 * Permission is hereby granted, free of charge, to any person obtaining
10 * a copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sublicense, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice shall be
18 * included in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 /* For Linux and Solaris, need to add others as we port this */
34 #define LIBSUFFIX "lib"
35 #define LIBPREFIX ".so"
42 g_module_open (const gchar *file, GModuleFlags flags)
47 flags &= G_MODULE_BIND_MASK;
48 if ((flags & G_MODULE_BIND_LAZY) != 0)
50 if ((flags & G_MODULE_BIND_LOCAL) != 0)
53 module = g_malloc (sizeof (GModule));
57 module->handle = dlopen (file, f);
62 g_module_symbol (GModule *module, const gchar *symbol_name, gpointer *symbol)
64 if (symbol_name == NULL || symbol == NULL)
67 if (module == NULL || module->handle == NULL)
70 *symbol = dlsym (module->handle, symbol_name);
71 return (*symbol != NULL);
81 g_module_close (GModule *module)
84 if (module == NULL || module->handle == NULL)
87 handle = module->handle;
88 module->handle = NULL;
90 return (0 == dlclose (handle));
96 g_module_open (const gchar *file, GModuleFlags flags)
98 g_error ("g_module_open not implemented on this platform");
102 g_module_symbol (GModule *module, const gchar *symbol_name, gpointer *symbol)
104 g_error ("g_module_open not implemented on this platform");
108 g_module_error (void)
110 g_error ("g_module_open not implemented on this platform");
114 g_module_close (GModule *module)
116 g_error ("g_module_open not implemented on this platform");
121 g_module_build_path (const gchar *directory, const gchar *module_name)
123 if (module_name == NULL)
127 return g_strdup_printf ("%s/" LIBPREFIX "%s" LIBSUFFIX, directory, module_name);
128 return g_strdup_printf (LIBPREFIX "%s" LIBSUFFIX, module_name);