summaryrefslogtreecommitdiffstats
path: root/freebsd/dependencies/imlib/files/patch-gmodule.diff
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/dependencies/imlib/files/patch-gmodule.diff')
-rw-r--r--freebsd/dependencies/imlib/files/patch-gmodule.diff734
1 files changed, 734 insertions, 0 deletions
diff --git a/freebsd/dependencies/imlib/files/patch-gmodule.diff b/freebsd/dependencies/imlib/files/patch-gmodule.diff
new file mode 100644
index 000000000..6aed03bc7
--- /dev/null
+++ b/freebsd/dependencies/imlib/files/patch-gmodule.diff
@@ -0,0 +1,734 @@
+--- imlib-1.9.15.orig/gdk_imlib/local-hack-gmodule/gmodule-dl.c
++++ imlib-1.9.15/gdk_imlib/local-hack-gmodule/gmodule-dl.c
+@@ -0,0 +1,158 @@
++/* GMODULE - GLIB wrapper code for dynamic module loading
++ * Copyright (C) 1998, 2000 Tim Janik
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++/*
++ * Modified by the GLib Team and others 1997-1999. See the AUTHORS
++ * file for a list of people on the GLib Team. See the ChangeLog
++ * files for a list of changes. These files are distributed with
++ * GLib at ftp://ftp.gtk.org/pub/gtk/.
++ */
++
++/*
++ * MT safe
++ */
++
++#include <dlfcn.h>
++
++/* Perl includes <nlist.h> and <link.h> instead of <dlfcn.h> on some systmes? */
++
++
++/* dlerror() is not implemented on all systems
++ */
++#ifndef LOCAL_HACK_G_MODULE_HAVE_DLERROR
++# ifdef __NetBSD__
++# define dlerror() g_strerror (errno)
++# else /* !__NetBSD__ */
++/* could we rely on errno's state here? */
++# define dlerror() "unknown dl-error"
++# endif /* !__NetBSD__ */
++#endif /* LOCAL_HACK_G_MODULE_HAVE_DLERROR */
++
++/* some flags are missing on some systems, so we provide
++ * harmless defaults.
++ * The Perl sources say, RTLD_LAZY needs to be defined as (1),
++ * at least for Solaris 1.
++ *
++ * Mandatory:
++ * RTLD_LAZY - resolve undefined symbols as code from the dynamic library
++ * is executed.
++ * RTLD_NOW - resolve all undefined symbols before dlopen returns, and fail
++ * if this cannot be done.
++ * Optionally:
++ * RTLD_GLOBAL - the external symbols defined in the library will be made
++ * available to subsequently loaded libraries.
++ */
++#ifndef RTLD_LAZY
++#define RTLD_LAZY 1
++#endif /* RTLD_LAZY */
++#ifndef RTLD_NOW
++#define RTLD_NOW 0
++#endif /* RTLD_NOW */
++/* some systems (OSF1 V5.0) have broken RTLD_GLOBAL linkage */
++#ifdef LOCAL_HACK_G_MODULE_BROKEN_RTLD_GLOBAL
++#undef RTLD_GLOBAL
++#endif /* LOCAL_HACK_G_MODULE_BROKEN_RTLD_GLOBAL */
++#ifndef RTLD_GLOBAL
++#define RTLD_GLOBAL 0
++#endif /* RTLD_GLOBAL */
++
++
++/* --- functions --- */
++static gchar*
++fetch_dlerror (void)
++{
++ gchar *msg = dlerror ();
++
++ /* make sure we always return an error message != NULL */
++
++ return msg ? msg : "unknown dl-error";
++}
++
++static gpointer
++_local_hack_g_module_open (const gchar *file_name,
++ gboolean bind_lazy)
++{
++ gpointer handle;
++
++ handle = dlopen (file_name, (bind_lazy ? RTLD_LAZY : RTLD_NOW));
++ if (!handle)
++ local_hack_g_module_set_error (fetch_dlerror ());
++
++ return handle;
++}
++
++static gpointer
++_local_hack_g_module_self (void)
++{
++ gpointer handle;
++
++ /* to query symbols from the program itself, special link options
++ * are required on some systems.
++ */
++
++ handle = dlopen (NULL, RTLD_LAZY);
++ if (!handle)
++ local_hack_g_module_set_error (fetch_dlerror ());
++
++ return handle;
++}
++
++static void
++_local_hack_g_module_close (gpointer handle,
++ gboolean is_unref)
++{
++ /* are there any systems out there that have dlopen()/dlclose()
++ * without a reference count implementation?
++ */
++ is_unref |= 1;
++
++ if (is_unref)
++ {
++ if (dlclose (handle) != 0)
++ local_hack_g_module_set_error (fetch_dlerror ());
++ }
++}
++
++static gpointer
++_local_hack_g_module_symbol (gpointer handle,
++ const gchar *symbol_name)
++{
++ gpointer p;
++
++ p = dlsym (handle, symbol_name);
++ if (!p)
++ local_hack_g_module_set_error (fetch_dlerror ());
++
++ return p;
++}
++
++static gchar*
++_local_hack_g_module_build_path (const gchar *directory,
++ const gchar *module_name)
++{
++ if (directory && *directory) {
++ if (strncmp (module_name, "lib", 3) == 0)
++ return g_strconcat (directory, "/", module_name, NULL);
++ else
++ return g_strconcat (directory, "/lib", module_name, ".so", NULL);
++ } else if (strncmp (module_name, "lib", 3) == 0)
++ return g_strdup (module_name);
++ else
++ return g_strconcat ("lib", module_name, ".so", NULL);
++}
+--- imlib-1.9.15.orig/gdk_imlib/local-hack-gmodule/gmodule-local.h
++++ imlib-1.9.15/gdk_imlib/local-hack-gmodule/gmodule-local.h
+@@ -0,0 +1,100 @@
++/* GMODULE - GLIB wrapper code for dynamic module loading
++ * Copyright (C) 1998 Tim Janik
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++/*
++ * Modified by the GLib Team and others 1997-1999. See the AUTHORS
++ * file for a list of people on the GLib Team. See the ChangeLog
++ * files for a list of changes. These files are distributed with
++ * GLib at ftp://ftp.gtk.org/pub/gtk/.
++ */
++
++#ifndef __GMODULE_H__
++#define __GMODULE_H__
++
++#include <glib.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/* exporting and importing functions, this is special cased
++ * to feature Windows dll stubs.
++ */
++#define LOCAL_HACK_G_MODULE_IMPORT extern
++#ifdef NATIVE_WIN32
++# define LOCAL_HACK_G_MODULE_EXPORT __declspec(dllexport)
++#else /* !NATIVE_WIN32 */
++# define LOCAL_HACK_G_MODULE_EXPORT
++#endif /* !NATIVE_WIN32 */
++
++typedef enum
++{
++ LOCAL_HACK_G_MODULE_BIND_LAZY = 1 << 0,
++ LOCAL_HACK_G_MODULE_BIND_MASK = 0x01
++} LocalHackGModuleFlags;
++
++typedef struct _LocalHackGModule LocalHackGModule;
++typedef const gchar* (*LocalHackGModuleCheckInit) (LocalHackGModule *module);
++typedef void (*LocalHackGModuleUnload) (LocalHackGModule *module);
++
++/* return TRUE if dynamic module loading is supported */
++gboolean local_hack_g_module_supported (void);
++
++/* open a module `file_name' and return handle, which is NULL on error */
++LocalHackGModule* local_hack_g_module_open (const gchar *file_name,
++ LocalHackGModuleFlags flags);
++
++/* close a previously opened module, returns TRUE on success */
++gboolean local_hack_g_module_close (LocalHackGModule *module);
++
++/* make a module resident so local_hack_g_module_close on it will be ignored */
++void local_hack_g_module_make_resident (LocalHackGModule *module);
++
++/* query the last module error as a string */
++gchar* local_hack_g_module_error (void);
++
++/* retrive a symbol pointer from `module', returns TRUE on success */
++gboolean local_hack_g_module_symbol (LocalHackGModule *module,
++ const gchar *symbol_name,
++ gpointer *symbol);
++
++/* retrive the file name from an existing module */
++gchar* local_hack_g_module_name (LocalHackGModule *module);
++
++
++/* Build the actual file name containing a module. `directory' is the
++ * directory where the module file is supposed to be, or NULL or empty
++ * in which case it should either be in the current directory or, on
++ * some operating systems, in some standard place, for instance on the
++ * PATH. Hence, to be absoultely sure to get the correct module,
++ * always pass in a directory. The file name consists of the directory,
++ * if supplied, and `module_name' suitably decorated accoring to
++ * the operating system's conventions (for instance lib*.so or *.dll).
++ *
++ * No checks are made that the file exists, or is of correct type.
++ */
++gchar* local_hack_g_module_build_path (const gchar *directory,
++ const gchar *module_name);
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++
++#endif /* __GMODULE_H__ */
+--- imlib-1.9.15.orig/gdk_imlib/local-hack-gmodule/gmoduleconf.h
++++ imlib-1.9.15/gdk_imlib/local-hack-gmodule/gmoduleconf.h
+@@ -0,0 +1,45 @@
++/* GMODULE - GLIB wrapper code for dynamic module loading
++ * Copyright (C) 1998 Tim Janik
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++#ifndef __LOCAL_HACK_G_MODULE_CONF_H__
++#define __LOCAL_HACK_G_MODULE_CONF_H__
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++
++#define LOCAL_HACK_G_MODULE_IMPL_NONE 0
++#define LOCAL_HACK_G_MODULE_IMPL_DL 1
++#define LOCAL_HACK_G_MODULE_IMPL_DLD 2
++#define LOCAL_HACK_G_MODULE_IMPL_WIN32 3
++
++#define LOCAL_HACK_G_MODULE_IMPL LOCAL_HACK_G_MODULE_IMPL_DL
++#undef LOCAL_HACK_G_MODULE_HAVE_DLERROR
++#if (1)
++#define LOCAL_HACK_G_MODULE_HAVE_DLERROR
++#endif
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++
++#endif /* __LOCAL_HACK_G_MODULE_CONF_H__ */
+--- imlib-1.9.15.orig/gdk_imlib/local-hack-gmodule/gmodule-local.c
++++ imlib-1.9.15/gdk_imlib/local-hack-gmodule/gmodule-local.c
+@@ -0,0 +1,418 @@
++/* GMODULE - GLIB wrapper code for dynamic module loading
++ * Copyright (C) 1998 Tim Janik
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++/*
++ * Modified by the GLib Team and others 1997-1999. See the AUTHORS
++ * file for a list of people on the GLib Team. See the ChangeLog
++ * files for a list of changes. These files are distributed with
++ * GLib at ftp://ftp.gtk.org/pub/gtk/.
++ */
++
++/*
++ * MT safe
++ */
++
++#include "gmodule-local.h"
++#include "gmoduleconf.h"
++#include <errno.h>
++#include <string.h>
++
++
++/* We maintain a list of modules, so we can reference count them.
++ * That's needed because some platforms don't support refernce counts on
++ * modules e.g. the shl_* implementation of HP-UX
++ * (http://www.stat.umn.edu/~luke/xls/projects/dlbasics/dlbasics.html).
++ * Also, the module for the program itself is kept seperatedly for
++ * faster access and because it has special semantics.
++ */
++
++
++/* --- structures --- */
++struct _LocalHackGModule
++{
++ gchar *file_name;
++ gpointer handle;
++ guint ref_count : 31;
++ guint is_resident : 1;
++ LocalHackGModuleUnload unload;
++ LocalHackGModule *next;
++};
++
++
++/* --- prototypes --- */
++static gpointer _local_hack_g_module_open (const gchar *file_name,
++ gboolean bind_lazy);
++static void _local_hack_g_module_close (gpointer handle,
++ gboolean is_unref);
++static gpointer _local_hack_g_module_self (void);
++static gpointer _local_hack_g_module_symbol (gpointer handle,
++ const gchar *symbol_name);
++static gchar* _local_hack_g_module_build_path (const gchar *directory,
++ const gchar *module_name);
++static inline void local_hack_g_module_set_error (const gchar *error);
++static inline LocalHackGModule* local_hack_g_module_find_by_handle (gpointer handle);
++static inline LocalHackGModule* local_hack_g_module_find_by_name (const gchar *name);
++
++
++/* --- variables --- */
++G_LOCK_DEFINE_STATIC (LocalHackGModule);
++static LocalHackGModule *modules = NULL;
++static LocalHackGModule *main_module = NULL;
++static GStaticPrivate module_error_private = G_STATIC_PRIVATE_INIT;
++
++
++/* --- inline functions --- */
++static inline LocalHackGModule*
++local_hack_g_module_find_by_handle (gpointer handle)
++{
++ LocalHackGModule *module;
++ LocalHackGModule *retval = NULL;
++
++ G_LOCK (LocalHackGModule);
++ if (main_module && main_module->handle == handle)
++ retval = main_module;
++ else
++ for (module = modules; module; module = module->next)
++ if (handle == module->handle)
++ {
++ retval = module;
++ break;
++ }
++ G_UNLOCK (LocalHackGModule);
++
++ return retval;
++}
++
++static inline LocalHackGModule*
++local_hack_g_module_find_by_name (const gchar *name)
++{
++ LocalHackGModule *module;
++ LocalHackGModule *retval = NULL;
++
++ G_LOCK (LocalHackGModule);
++ for (module = modules; module; module = module->next)
++ if (strcmp (name, module->file_name) == 0)
++ {
++ retval = module;
++ break;
++ }
++ G_UNLOCK (LocalHackGModule);
++
++ return retval;
++}
++
++static inline void
++local_hack_g_module_set_error (const gchar *error)
++{
++ g_static_private_set (&module_error_private, g_strdup (error), g_free);
++ errno = 0;
++}
++
++
++/* --- include platform specifc code --- */
++#define SUPPORT_OR_RETURN(rv) { local_hack_g_module_set_error (NULL); }
++#if (LOCAL_HACK_G_MODULE_IMPL == LOCAL_HACK_G_MODULE_IMPL_DL)
++#include "gmodule-dl.c"
++#elif (LOCAL_HACK_G_MODULE_IMPL == LOCAL_HACK_G_MODULE_IMPL_DLD)
++#include "gmodule-dld.c"
++#elif (LOCAL_HACK_G_MODULE_IMPL == LOCAL_HACK_G_MODULE_IMPL_WIN32)
++#include "gmodule-win32.c"
++#else
++#undef SUPPORT_OR_RETURN
++#define SUPPORT_OR_RETURN(rv) { local_hack_g_module_set_error ("dynamic modules are " \
++ "not supported by this system"); return rv; }
++static gpointer
++_local_hack_g_module_open (const gchar *file_name,
++ gboolean bind_lazy)
++{
++ return NULL;
++}
++static void
++_local_hack_g_module_close (gpointer handle,
++ gboolean is_unref)
++{
++}
++static gpointer
++_local_hack_g_module_self (void)
++{
++ return NULL;
++}
++static gpointer
++_local_hack_g_module_symbol (gpointer handle,
++ const gchar *symbol_name)
++{
++ return NULL;
++}
++static gchar*
++_local_hack_g_module_build_path (const gchar *directory,
++ const gchar *module_name)
++{
++ return NULL;
++}
++#endif /* no implementation */
++
++#if defined (NATIVE_WIN32) && defined (__LCC__)
++int __stdcall
++LibMain (void *hinstDll,
++ unsigned long dwReason,
++ void *reserved)
++{
++ return 1;
++}
++#endif /* NATIVE_WIN32 && __LCC__ */
++
++
++/* --- functions --- */
++gboolean
++local_hack_g_module_supported (void)
++{
++ SUPPORT_OR_RETURN (FALSE);
++
++ return TRUE;
++}
++
++LocalHackGModule*
++local_hack_g_module_open (const gchar *file_name,
++ LocalHackGModuleFlags flags)
++{
++ LocalHackGModule *module;
++ gpointer handle;
++
++ SUPPORT_OR_RETURN (NULL);
++
++ if (!file_name)
++ {
++ G_LOCK (LocalHackGModule);
++ if (!main_module)
++ {
++ handle = _local_hack_g_module_self ();
++ if (handle)
++ {
++ main_module = g_new (LocalHackGModule, 1);
++ main_module->file_name = NULL;
++ main_module->handle = handle;
++ main_module->ref_count = 1;
++ main_module->is_resident = TRUE;
++ main_module->unload = NULL;
++ main_module->next = NULL;
++ }
++ }
++ G_UNLOCK (LocalHackGModule);
++
++ return main_module;
++ }
++
++ /* we first search the module list by name */
++ module = local_hack_g_module_find_by_name (file_name);
++ if (module)
++ {
++ module->ref_count++;
++
++ return module;
++ }
++
++ /* open the module */
++ handle = _local_hack_g_module_open (file_name, (flags & LOCAL_HACK_G_MODULE_BIND_LAZY) != 0);
++ if (handle)
++ {
++ gchar *saved_error;
++ LocalHackGModuleCheckInit check_init;
++ const gchar *check_failed = NULL;
++
++ /* search the module list by handle, since file names are not unique */
++ module = local_hack_g_module_find_by_handle (handle);
++ if (module)
++ {
++ _local_hack_g_module_close (module->handle, TRUE);
++ module->ref_count++;
++ local_hack_g_module_set_error (NULL);
++
++ return module;
++ }
++
++ saved_error = g_strdup (local_hack_g_module_error ());
++ local_hack_g_module_set_error (NULL);
++
++ module = g_new (LocalHackGModule, 1);
++ module->file_name = g_strdup (file_name);
++ module->handle = handle;
++ module->ref_count = 1;
++ module->is_resident = FALSE;
++ module->unload = NULL;
++ G_LOCK (LocalHackGModule);
++ module->next = modules;
++ modules = module;
++ G_UNLOCK (LocalHackGModule);
++
++ /* check initialization */
++ if (local_hack_g_module_symbol (module, "local_hack_g_module_check_init", (gpointer) &check_init))
++ check_failed = check_init (module);
++
++ /* we don't call unload() if the initialization check failed. */
++ if (!check_failed)
++ local_hack_g_module_symbol (module, "local_hack_g_module_unload", (gpointer) &module->unload);
++
++ if (check_failed)
++ {
++ gchar *error;
++
++ error = g_strconcat ("LocalHackGModule initialization check failed: ", check_failed, NULL);
++ local_hack_g_module_close (module);
++ module = NULL;
++ local_hack_g_module_set_error (error);
++ g_free (error);
++ }
++ else
++ local_hack_g_module_set_error (saved_error);
++
++ g_free (saved_error);
++ }
++
++ return module;
++}
++
++gboolean
++local_hack_g_module_close (LocalHackGModule *module)
++{
++ SUPPORT_OR_RETURN (FALSE);
++
++ g_return_val_if_fail (module != NULL, FALSE);
++ g_return_val_if_fail (module->ref_count > 0, FALSE);
++
++ module->ref_count--;
++
++ if (!module->ref_count && !module->is_resident && module->unload)
++ {
++ LocalHackGModuleUnload unload;
++
++ unload = module->unload;
++ module->unload = NULL;
++ unload (module);
++ }
++
++ if (!module->ref_count && !module->is_resident)
++ {
++ LocalHackGModule *last;
++ LocalHackGModule *node;
++
++ last = NULL;
++
++ G_LOCK (LocalHackGModule);
++ node = modules;
++ while (node)
++ {
++ if (node == module)
++ {
++ if (last)
++ last->next = node->next;
++ else
++ modules = node->next;
++ break;
++ }
++ last = node;
++ node = last->next;
++ }
++ module->next = NULL;
++ G_UNLOCK (LocalHackGModule);
++
++ _local_hack_g_module_close (module->handle, FALSE);
++ g_free (module->file_name);
++
++ g_free (module);
++ }
++
++ return local_hack_g_module_error() == NULL;
++}
++
++void
++local_hack_g_module_make_resident (LocalHackGModule *module)
++{
++ g_return_if_fail (module != NULL);
++
++ module->is_resident = TRUE;
++}
++
++gchar*
++local_hack_g_module_error (void)
++{
++ return g_static_private_get (&module_error_private);
++}
++
++gboolean
++local_hack_g_module_symbol (LocalHackGModule *module,
++ const gchar *symbol_name,
++ gpointer *symbol)
++{
++ gchar *module_error;
++
++ if (symbol)
++ *symbol = NULL;
++ SUPPORT_OR_RETURN (FALSE);
++
++ g_return_val_if_fail (module != NULL, FALSE);
++ g_return_val_if_fail (symbol_name != NULL, FALSE);
++ g_return_val_if_fail (symbol != NULL, FALSE);
++
++#ifdef LOCAL_HACK_G_MODULE_NEED_USCORE
++ {
++ gchar *name;
++
++ name = g_strconcat ("_", symbol_name, NULL);
++ *symbol = _local_hack_g_module_symbol (module->handle, name);
++ g_free (name);
++ }
++#else /* !LOCAL_HACK_G_MODULE_NEED_USCORE */
++ *symbol = _local_hack_g_module_symbol (module->handle, symbol_name);
++#endif /* !LOCAL_HACK_G_MODULE_NEED_USCORE */
++
++ module_error = local_hack_g_module_error ();
++ if (module_error)
++ {
++ gchar *error;
++
++ error = g_strconcat ("`", symbol_name, "': ", module_error, NULL);
++ local_hack_g_module_set_error (error);
++ g_free (error);
++ *symbol = NULL;
++
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++gchar*
++local_hack_g_module_name (LocalHackGModule *module)
++{
++ g_return_val_if_fail (module != NULL, NULL);
++
++ if (module == main_module)
++ return "main";
++
++ return module->file_name;
++}
++
++gchar*
++local_hack_g_module_build_path (const gchar *directory,
++ const gchar *module_name)
++{
++ g_return_val_if_fail (module_name != NULL, NULL);
++
++ return _local_hack_g_module_build_path (directory, module_name);
++}
+