]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
* libltdl/ltdl.c (lt_find_dlhandle): New function.
authorGary V. Vaughan <gary@gnu.org>
Mon, 21 Feb 2000 22:27:24 +0000 (22:27 +0000)
committerGary V. Vaughan <gary@gnu.org>
Mon, 21 Feb 2000 22:27:24 +0000 (22:27 +0000)
(tryall_dlopen): Use it.
* libltdl/ltdl.h:  Prototype it.
* doc/libtool.texi: Document it.
* NEWS: updated.

ChangeLog
NEWS
doc/libtool.texi
libltdl/ltdl.c
libltdl/ltdl.h

index 4bd2bd46cc2613f96c162f1cb8a51961d3162208..387b06bfbe0a29d1d94406a1e57578b5770ad8da 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2000-02-21  Gary V. Vaughan  <gary@oranda.demon.co.uk>
 
+       * libltdl/ltdl.c (lt_find_dlhandle): New function.
+       (tryall_dlopen): Use it.
+       * libltdl/ltdl.h:  Prototype it.
+       * doc/libtool.texi: Document it.
+       * NEWS: updated.
+
        * libltdl/ltdl.c (lt_dlinit): removed unused variable, `loader'.
        
        * libltdl/ltdl.c (lt_remove_dlloader): typo, s/=/==/g.
diff --git a/NEWS b/NEWS
index 797bd0a42865d0c93b789d5d5bb1188e81d0f655..b7b868b37b97cb42ed701166b00018421e226e92 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,8 @@ New in 1.3d: 2000-??-??; CVS version 1.3c, Libtool team:
   loader to libltdl..
 * New functions lt_dladderror, lt_dlseterror in libltdl can be used to
   integrate user module loaders with lt_dlerror.
+* New function lt_find_dlhandle can be used to lookup the handle
+  associated with a previously dlopened filename.
 * "-Xcompiler" and "-Wc," does now work in compile mode, too.
 * Start of support code for cross-compiling to win32.
 * libltdl can now be built as a dll with win32.
index f58b8fdc725bcbf2f17e87bf7574e909b28bb45d..9162087c647135c5c2ff091ddf295544e644fbf5 100644 (file)
@@ -2918,6 +2918,14 @@ to be able to @code{dlopen} such libraries as well as libtool modules
 transparently.
 @end deftypefun
 
+@deftypefun lt_dlhandle lt_find_dlhandle (const char *@var{name})
+Lookup the module handle for the module that was loaded from
+@var{name}.  @var{name} must be exactly the same as the name used to
+open the module with @samp{lt_dlopen} or @samp{lt_dlopenext}.  If
+@var{name} was not previously used to open a module with either of those
+functions, @code{NULL} is returned.
+@end deftypefun
+
 @deftypefun int lt_dlclose (lt_dlhandle @var{handle})
 Decrement the reference count on the module @var{handle}.
 If it drops to zero and no other module depends on this module,
index eb3a93b382be11290bafbe8b2da790372e5fde98..64d4c4ebfbeec630be6b823da877c6f93c84f934 100644 (file)
@@ -908,12 +908,21 @@ tryall_dlopen (handle, filename)
        lt_dlhandle *handle;
        const char *filename;
 {
-       lt_dlhandle cur;
+       lt_dlhandle cur = handles;
        lt_dlloader_t *loader = loaders;
        const char *saved_error = last_error;
        
        /* check whether the module was already opened */
-       cur = lt_find_dlhandle (filename);
+       while (cur) {
+               /* try to dlopen the program itself? */
+               if (!cur->info.filename && !filename)
+                       break;
+               if (cur->info.filename && filename && 
+                   strcmp(cur->info.filename, filename) == 0)
+                       break;
+               cur = cur->next;
+       }
+
        if (cur) {
                cur->info.ref_count++;
                *handle = cur;
@@ -1594,18 +1603,18 @@ lt_dlopenext (filename)
 }
 
 lt_dlhandle
-lt_find_dlhandle (filename)
-       const char *filename;
+lt_find_dlhandle (name)
+       const char *name;
 {
        lt_dlhandle cur = handles;
        
        /* check whether the module was already opened */
        while (cur) {
                /* try to dlopen the program itself? */
-               if (!cur->info.filename && !filename)
+               if (!cur->info.name && !name)
                        break;
-               if (cur->info.filename && filename && 
-                   strcmp(cur->info.filename, filename) == 0)
+               if (cur->info.name && name && 
+                   strcmp(cur->info.name, name) == 0)
                        break;
                cur = cur->next;
        }
index 2a2a75b8641819c194f4aa56f6845a745fe64c8e..9a2494b71f9f7fadb760b2105108d21eb11a1b98 100644 (file)
@@ -195,7 +195,7 @@ __BEGIN_DECLS
 extern int lt_dlinit LTDL_PARAMS((void));
 extern int lt_dlexit LTDL_PARAMS((void));
 
-/* Module search path manipultation.  */
+/* Module search path manipulation.  */
 extern int lt_dladdsearchdir LTDL_PARAMS((const char *search_dir));
 extern int lt_dlsetsearchpath LTDL_PARAMS((const char *search_path));
 extern const char *lt_dlgetsearchpath LTDL_PARAMS((void));
@@ -203,6 +203,7 @@ extern const char *lt_dlgetsearchpath LTDL_PARAMS((void));
 /* Portable libltdl versions of the system dlopen() API. */
 extern lt_dlhandle lt_dlopen LTDL_PARAMS((const char *filename));
 extern lt_dlhandle lt_dlopenext LTDL_PARAMS((const char *filename));
+extern lt_dlhandle lt_find_dlhandle LTDL_PARAMS((const char *name));
 extern lt_ptr_t lt_dlsym LTDL_PARAMS((lt_dlhandle handle, const char *name));
 extern const char *lt_dlerror LTDL_PARAMS((void));
 extern int lt_dlclose LTDL_PARAMS((lt_dlhandle handle));