]> granicus.if.org Git - p11-kit/commitdiff
common: always use p11_dl_close wrapper
authorFabian Groffen <grobian@gentoo.org>
Wed, 7 Jun 2017 12:37:27 +0000 (14:37 +0200)
committerDaiki Ueno <ueno@gnu.org>
Tue, 27 Jun 2017 11:10:32 +0000 (13:10 +0200)
Solaris doesn't like it when dlclose is referenced using a define,
resulting in a linker error looking for a symbol version.  Simply
calling the function in a normal way (instead of storing its address)
solves this linking error.
The error message seen by GNU ld is:
  dlclose: invalid version 7 (max 0)

common/compat.c
common/compat.h

index 970e5ed65ebc6078ca69f53c97696192c2fef27c..692e2ca1ade20e9f07a12aea7fc58c7bee223b0f 100644 (file)
@@ -278,12 +278,6 @@ p11_dl_error (void)
        return msg_buf;
 }
 
-void
-p11_dl_close (void *dl)
-{
-       FreeLibrary (dl);
-}
-
 int
 p11_thread_create (p11_thread_t *thread,
                    p11_thread_routine routine,
@@ -861,6 +855,17 @@ strerror_r (int errnum,
 
 #endif /* HAVE_STRERROR_R */
 
+void
+p11_dl_close (void *dl)
+{
+#ifdef OS_WIN32
+       FreeLibrary (dl);
+#else
+       (void) dlclose (dl);
+#endif
+}
+
+
 #ifdef OS_UNIX
 
 #include <unistd.h>
index 15b31063eb16e41430294b19dc88a724d3606833..b021494dd6bd24be48293ef17c882ca777a41b8e 100644 (file)
@@ -91,6 +91,8 @@ char *       mkdtemp     (char *template);
 
 char *       strdup_path_mangle (const char *template);
 
+void         p11_dl_close       (void * dl);
+
 /* -----------------------------------------------------------------------------
  * WIN32
  */
@@ -147,8 +149,6 @@ typedef HMODULE dl_module_t;
 
 char *    p11_dl_error       (void);
 
-void      p11_dl_close       (void * dl);
-
 #define p11_sleep_ms(ms) \
        (Sleep (ms))
 
@@ -206,8 +206,6 @@ typedef void * dl_module_t;
 
 #define p11_dl_open(f) \
        (dlopen ((f), RTLD_LOCAL | RTLD_NOW))
-#define p11_dl_close \
-       dlclose
 #define p11_dl_symbol(d, s) \
        (dlsym ((d), (s)))