X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gmodule%2Fgmodule-dld.c;h=401b32f73c10c815f940e44a58f3072a39f4e593;hb=36de18e66291f1585e651e4af54d2aa54c88ec75;hp=17d6e010e9aff50414944190bae8aaf6d25e612f;hpb=f477518c3af60dccfdd172abee0c7368e8f44189;p=platform%2Fupstream%2Fglib.git diff --git a/gmodule/gmodule-dld.c b/gmodule/gmodule-dld.c index 17d6e01..401b32f 100644 --- a/gmodule/gmodule-dld.c +++ b/gmodule/gmodule-dld.c @@ -1,25 +1,33 @@ /* GMODULE - GLIB wrapper code for dynamic module loading - * Copyright (C) 1998 Tim Janik + * 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 + * modify it under the terms of the GNU Lesser 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. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public + * You should have received a copy of the GNU Lesser 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-2000. 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 "config.h" #include @@ -60,9 +68,21 @@ /* --- functions --- */ + +/* + * shl_load() does not appear to support making symbols invisible to + * the global namespace. However, the default is to put the library + * last in the search order, which is approximately what we want, + * since it will cause symbols that conflict with existing symbols to + * be invisible. It is unclear if BIND_FIRST should be used when + * bind_local==0, since it may cause the loaded symbols to be used + * preferentially to the application's symbols, which is Almost + * Always Wrong. --ds + */ static gpointer -_g_module_open (const gchar *file_name, - gboolean bind_lazy) +_g_module_open (const gchar *file_name, + gboolean bind_lazy, + gboolean bind_local) { shl_t shl_handle; @@ -90,8 +110,8 @@ _g_module_self (void) } static void -_g_module_close (gpointer handle, - gboolean is_unref) +_g_module_close (gpointer handle, + gboolean is_unref) { if (!is_unref) { @@ -101,13 +121,22 @@ _g_module_close (gpointer handle, } static gpointer -_g_module_symbol (gpointer handle, - const gchar *symbol_name) +_g_module_symbol (gpointer handle, + const gchar *symbol_name) { gpointer p = NULL; /* should we restrict lookups to TYPE_PROCEDURE? */ + if (handle == PROG_HANDLE) + { + /* PROG_HANDLE will only lookup symbols in the program itself, not honouring + * libraries. passing NULL as a handle will also try to lookup the symbol + * in currently loaded libraries. fix pointed out and supplied by: + * David Gero + */ + handle = NULL; + } if (shl_findsym ((shl_t*) &handle, symbol_name, TYPE_UNDEFINED, &p) != 0 || handle == NULL || p == NULL) {