You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.1 KiB
197 lines
5.1 KiB
patch from upstream
|
|
|
|
From 1c872a3e9c4cbf3cbd485168a7e98b589bbad57a Mon Sep 17 00:00:00 2001
|
|
From: alonbl <alonbl@6d86ddd8-19ff-0310-a323-aa2ba648d307>
|
|
Date: Wed, 14 Dec 2011 10:46:45 +0000
|
|
Subject: [PATCH] Remove ltdl usage
|
|
|
|
Use native POSIX/Windows
|
|
|
|
|
|
git-svn-id: http://www.opensc-project.org/svn/libp11/trunk@202 6d86ddd8-19ff-0310-a323-aa2ba648d307
|
|
---
|
|
configure.ac | 23 +++++------------------
|
|
src/Makefile.am | 4 ++--
|
|
src/Makefile.mak | 7 ++-----
|
|
src/libpkcs11.c | 52 +++++++++++++++++++++++++++++++++++++++-------------
|
|
4 files changed, 48 insertions(+), 38 deletions(-)
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 679b8da..9fa96bf 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -180,25 +180,14 @@ if test "${svn_checkout}" = "yes"; then
|
|
fi
|
|
fi
|
|
|
|
-AC_ARG_VAR([LTLIB_CFLAGS], [C compiler flags for libltdl])
|
|
-AC_ARG_VAR([LTLIB_LIBS], [linker flags for libltdl])
|
|
-if test -z "${LTLIB_LIBS}"; then
|
|
+if test "${WIN32}" != "yes"; then
|
|
AC_CHECK_LIB(
|
|
- [ltdl],
|
|
- [lt_dlopen],
|
|
- [LTLIB_LIBS="-lltdl"],
|
|
- [AC_MSG_ERROR([ltdl not found, please install libltdl and/or libtool])]
|
|
+ [dl],
|
|
+ [dlopen],
|
|
+ ,
|
|
+ [AC_MSG_ERROR([libdl required])]
|
|
)
|
|
-
|
|
fi
|
|
-saved_CFLAGS="${CFLAGS}"
|
|
-CFLAGS="${CFLAGS} ${LTLIB_CFLAGS}"
|
|
-AC_CHECK_HEADER(
|
|
- [ltdl.h],
|
|
- ,
|
|
- [AC_MSG_ERROR([ltdl.h not found, please install libltdl and/or libtool])]
|
|
-)
|
|
-CFLAGS="${saved_CFLAGS}"
|
|
|
|
PKG_CHECK_MODULES(
|
|
[OPENSSL],
|
|
@@ -273,8 +262,6 @@ Compiler flags: ${CFLAGS}
|
|
Linker flags: ${LDFLAGS}
|
|
Libraries: ${LIBS}
|
|
|
|
-LTLIB_CFLAGS: ${LTLIB_CFLAGS}
|
|
-LTLIB_LIBS: ${LTLIB_LIBS}
|
|
OPENSSL_CFLAGS: ${OPENSSL_CFLAGS}
|
|
OPENSSL_LIBS: ${OPENSSL_LIBS}
|
|
|
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
|
index c66a8cd..0910f44 100644
|
|
--- a/src/Makefile.am
|
|
+++ b/src/Makefile.am
|
|
@@ -16,8 +16,8 @@ libp11_la_SOURCES += versioninfo.rc
|
|
else
|
|
dist_noinst_DATA = versioninfo.rc
|
|
endif
|
|
-libp11_la_CFLAGS = $(AM_CFLAGS) $(OPENSSL_CFLAGS) $(LTLIB_CFLAGS)
|
|
-libp11_la_LIBADD = $(OPENSSL_LIBS) $(LTLIB_LIBS)
|
|
+libp11_la_CFLAGS = $(AM_CFLAGS) $(OPENSSL_CFLAGS)
|
|
+libp11_la_LIBADD = $(OPENSSL_LIBS)
|
|
libp11_la_LDFLAGS = $(AM_LDFLAGS) \
|
|
-version-info @LIBP11_LT_CURRENT@:@LIBP11_LT_REVISION@:@LIBP11_LT_AGE@ \
|
|
-export-symbols "$(srcdir)/libp11.exports" \
|
|
diff --git a/src/Makefile.mak b/src/Makefile.mak
|
|
index 73b5428..fa0809c 100644
|
|
--- a/src/Makefile.mak
|
|
+++ b/src/Makefile.mak
|
|
@@ -1,10 +1,7 @@
|
|
-LIBLTDL_INC = # E.g. /IC:\libtool-1.5.8-lib\include
|
|
-LIBLTDL_LIB = # E.g. C:\libtool-1.5.8-lib\lib\libltdl.lib
|
|
-
|
|
OPENSSL_INC = /IC:\openssl\include
|
|
OPENSSL_LIB = C:\openssl\out32dll\libeay32.lib
|
|
|
|
-COPTS = /Zi /MD /nologo /I..\ /I. $(OPENSSL_INC) $(LIBLTDL_INC) /D_WIN32_WINNT=0x0400 /DWIN32 /DWIN32_LEAN_AND_MEAN
|
|
+COPTS = /Zi /MD /nologo /I..\ /I. $(OPENSSL_INC) /D_WIN32_WINNT=0x0400 /DWIN32 /DWIN32_LEAN_AND_MEAN
|
|
LINKFLAGS = /DEBUG /NOLOGO /INCREMENTAL:NO /MACHINE:IX86
|
|
|
|
TARGET = libp11.dll
|
|
@@ -28,6 +25,6 @@ $(TARGET): $(OBJECTS) versioninfo.res
|
|
echo EXPORTS >> $*.def
|
|
type $*.exports >> $*.def
|
|
link $(LINKFLAGS) /dll /def:$*.def /implib:$*.lib /out:$(TARGET) \
|
|
- $(OBJECTS) $(OPENSSL_LIB) $(LIBLTDL_LIB) versioninfo.res
|
|
+ $(OBJECTS) $(OPENSSL_LIB) versioninfo.res
|
|
if EXIST $*.dll.manifest mt -manifest $*.dll.manifest -outputresource:$*.dll;2
|
|
|
|
diff --git a/src/libpkcs11.c b/src/libpkcs11.c
|
|
index a146361..93584d9 100644
|
|
--- a/src/libpkcs11.c
|
|
+++ b/src/libpkcs11.c
|
|
@@ -27,14 +27,18 @@
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
-#include <ltdl.h>
|
|
+#ifdef WIN32
|
|
+#include <windows.h>
|
|
+#else
|
|
+#include <dlfcn.h>
|
|
+#endif
|
|
#include "libp11-int.h"
|
|
|
|
#define MAGIC 0xd00bed00
|
|
|
|
struct sc_pkcs11_module {
|
|
unsigned int _magic;
|
|
- lt_dlhandle handle;
|
|
+ void *handle;
|
|
};
|
|
typedef struct sc_pkcs11_module sc_pkcs11_module_t;
|
|
|
|
@@ -52,19 +56,40 @@ C_LoadModule(const char *mspec, CK_FUNCTION_LIST_PTR_PTR funcs)
|
|
if (mspec == NULL)
|
|
return NULL;
|
|
|
|
- if (lt_dlinit() != 0)
|
|
- return NULL;
|
|
-
|
|
mod = (sc_pkcs11_module_t *) calloc(1, sizeof(*mod));
|
|
mod->_magic = MAGIC;
|
|
|
|
- mod->handle = lt_dlopen(mspec);
|
|
+#ifdef WIN32
|
|
+ mod->handle = LoadLibraryA(mspec);
|
|
+#else
|
|
+ mod->handle = dlopen(mspec, RTLD_NOW);
|
|
+#endif
|
|
+
|
|
if (mod->handle == NULL)
|
|
goto failed;
|
|
|
|
- /* Get the list of function pointers */
|
|
- c_get_function_list = (CK_RV (*)(CK_FUNCTION_LIST_PTR_PTR))
|
|
- lt_dlsym(mod->handle, "C_GetFunctionList");
|
|
+#ifdef WIN32
|
|
+ c_get_function_list = (CK_C_GetFunctionList)GetProcAddress (
|
|
+ mod->handle,
|
|
+ "C_GetFunctionList"
|
|
+ );
|
|
+#else
|
|
+ {
|
|
+ /*
|
|
+ * Make compiler happy!
|
|
+ */
|
|
+ void *p = dlsym(
|
|
+ mod->handle,
|
|
+ "C_GetFunctionList"
|
|
+ );
|
|
+ memmove(
|
|
+ &c_get_function_list,
|
|
+ &p,
|
|
+ sizeof(void *)
|
|
+ );
|
|
+ }
|
|
+#endif
|
|
+
|
|
if (!c_get_function_list)
|
|
goto failed;
|
|
rv = c_get_function_list(funcs);
|
|
@@ -89,13 +114,14 @@ C_UnloadModule(void *module)
|
|
if (!mod || mod->_magic != MAGIC)
|
|
return CKR_ARGUMENTS_BAD;
|
|
|
|
- if (lt_dlclose(mod->handle) < 0)
|
|
- return CKR_FUNCTION_FAILED;
|
|
+#ifdef WIN32
|
|
+ FreeLibrary(mod->handle);
|
|
+#else
|
|
+ dlclose(mod->handle);
|
|
+#endif
|
|
|
|
memset(mod, 0, sizeof(*mod));
|
|
free(mod);
|
|
|
|
- lt_dlexit();
|
|
-
|
|
return CKR_OK;
|
|
}
|
|
--
|
|
1.7.6.1
|
|
|