mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-20 15:26:26 +08:00
Add dl wrapper
This commit is contained in:
@@ -11,11 +11,10 @@
|
||||
#ifndef SDFUTIL_SDF_METH_H
|
||||
#define SDFUTIL_SDF_METH_H
|
||||
|
||||
|
||||
#include <gmssl/dylib.h>
|
||||
#include "sdf.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
typedef int (*SDF_OpenDevice_FuncPtr)(
|
||||
void **phDeviceHandle);
|
||||
@@ -350,11 +349,8 @@ typedef int (*SDF_DeleteObject_FuncPtr)(
|
||||
|
||||
typedef struct sdf_method_st {
|
||||
char *name;
|
||||
#ifdef WIN32
|
||||
HMODULE dso;
|
||||
#else
|
||||
void *dso;
|
||||
#endif
|
||||
dylib_handle_t dso;
|
||||
|
||||
SDF_OpenDevice_FuncPtr OpenDevice;
|
||||
SDF_CloseDevice_FuncPtr CloseDevice;
|
||||
SDF_OpenSession_FuncPtr OpenSession;
|
||||
|
||||
@@ -11,22 +11,13 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
#include <gmssl/dylib.h>
|
||||
#include "sdf_int.h"
|
||||
|
||||
#define SDFerr(a,b)
|
||||
|
||||
#ifdef WIN32
|
||||
#define SDF_METHOD_BIND_FUNCTION_EX(func,name) \
|
||||
sdf->func = (SDF_##func##_FuncPtr)GetProcAddress(sdf->dso, "SDF_"#name)
|
||||
#else
|
||||
#define SDF_METHOD_BIND_FUNCTION_EX(func,name) \
|
||||
sdf->func = (SDF_##func##_FuncPtr)dlsym(sdf->dso, "SDF_"#name)
|
||||
#endif
|
||||
sdf->func = (SDF_##func##_FuncPtr)dylib_get_function(sdf->dso, "SDF_"#name)
|
||||
|
||||
#define SDF_METHOD_BIND_FUNCTION(func) \
|
||||
SDF_METHOD_BIND_FUNCTION_EX(func,func)
|
||||
@@ -42,19 +33,11 @@ SDF_METHOD *SDF_METHOD_load_library(const char *so_path)
|
||||
}
|
||||
memset(sdf, 0, sizeof(*sdf));
|
||||
|
||||
#ifdef WIN32
|
||||
if ((sdf->dso = LoadLibraryA(so_path)) == NULL) {
|
||||
if (!(sdf->dso = dylib_load_library(so_path))) {
|
||||
fprintf(stderr, "%s %d: %s\n", __FILE__, __LINE__, dylib_error_str());
|
||||
goto end;
|
||||
}
|
||||
|
||||
#else
|
||||
if (!(sdf->dso = dlopen(so_path, 0/*RTLD_LAZY*/))) { // FIXME: dlfcn.h, dlopen, RTLD_LAZY not in windows!
|
||||
fprintf(stderr, "%s %d: %s\n", __FILE__, __LINE__, dlerror());
|
||||
SDFerr(SDF_F_SDF_METHOD_LOAD_LIBRARY, SDF_R_DSO_LOAD_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
#endif
|
||||
|
||||
SDF_METHOD_BIND_FUNCTION(OpenDevice);
|
||||
SDF_METHOD_BIND_FUNCTION(CloseDevice);
|
||||
SDF_METHOD_BIND_FUNCTION(OpenSession);
|
||||
|
||||
Reference in New Issue
Block a user