* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* first. */
typedef char* (*DSO_MERGER_FUNC)(DSO *, const char *, const char *);
-typedef struct dso_meth_st
- {
+typedef struct dso_meth_st {
const char *name;
/* Loads a shared library, NB: new DSO_METHODs must ensure that a
* successful load populates the loaded_filename field, and likewise a
int (*finish)(DSO *dso);
/* Return pathname of the module containing location */
- int (*pathbyaddr)(void *addr,char *path,int sz);
+ int (*pathbyaddr)(void *addr, char *path, int sz);
/* Perform global symbol lookup, i.e. among *all* modules */
void *(*globallookup)(const char *symname);
- } DSO_METHOD;
+} DSO_METHOD;
/**********************************************************************/
/* The low-level handle type used to refer to a loaded shared library */
-struct dso_st
- {
+struct dso_st {
DSO_METHOD *meth;
/* Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS
* doesn't use anything but will need to cache the filename
* corresponds to a loaded library or not, and (b) the filename with
* which it was actually loaded. */
char *loaded_filename;
- };
+};
DSO * DSO_new(void);
* oldcb is non-NULL then it is set to the function pointer value being
* replaced. Return value is non-zero for success. */
int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
- DSO_NAME_CONVERTER_FUNC *oldcb);
+ DSO_NAME_CONVERTER_FUNC *oldcb);
/* These functions can be used to get/set the platform-independant filename
* used for a DSO. NB: set will fail if the DSO is already loaded. */
const char *DSO_get_filename(DSO *dso);
* pathname of cryptolib itself is returned. Negative or zero
* return value denotes error.
*/
-int DSO_pathbyaddr(void *addr,char *path,int sz);
+int DSO_pathbyaddr(void *addr, char *path, int sz);
/* This function should be used with caution! It looks up symbols in
* *all* loaded modules and if module gets unloaded by somebody else
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
#include <openssl/dso.h>
#ifndef DSO_DLFCN
-DSO_METHOD *DSO_METHOD_dlfcn(void)
- {
+DSO_METHOD *
+DSO_METHOD_dlfcn(void)
+{
return NULL;
- }
+}
#else
#ifdef HAVE_DLFCN_H
#endif
static char *dlfcn_name_converter(DSO *dso, const char *filename);
static char *dlfcn_merger(DSO *dso, const char *filespec1,
- const char *filespec2);
-static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
+ const char *filespec2);
+static int dlfcn_pathbyaddr(void *addr, char *path, int sz);
static void *dlfcn_globallookup(const char *name);
static DSO_METHOD dso_meth_dlfcn = {
NULL, /* finish */
dlfcn_pathbyaddr,
dlfcn_globallookup
- };
+};
-DSO_METHOD *DSO_METHOD_dlfcn(void)
- {
- return(&dso_meth_dlfcn);
- }
+DSO_METHOD *
+DSO_METHOD_dlfcn(void)
+{
+ return (&dso_meth_dlfcn);
+}
/* For this DSO_METHOD, our meth_data STACK will contain;
* (i) the handle (void*) returned from dlopen().
*/
-static int dlfcn_load(DSO *dso)
- {
+static int
+dlfcn_load(DSO *dso)
+{
void *ptr = NULL;
/* See applicable comments in dso_dl.c */
char *filename = DSO_convert_filename(dso, NULL);
int flags = RTLD_LAZY;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
+ if (filename == NULL) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_NO_FILENAME);
goto err;
- }
+ }
if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
flags |= RTLD_GLOBAL;
ptr = dlopen(filename, flags);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_LOAD_FAILED);
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_LOAD_FAILED);
ERR_add_error_data(4, "filename(", filename, "): ", dlerror());
goto err;
- }
- if(!sk_void_push(dso->meth_data, (char *)ptr))
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_STACK_ERROR);
+ }
+ if (!sk_void_push(dso->meth_data, (char *)ptr)) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_STACK_ERROR);
goto err;
- }
+ }
/* Success */
dso->loaded_filename = filename;
- return(1);
+ return (1);
+
err:
/* Cleanup! */
- if(filename != NULL)
+ if (filename != NULL)
free(filename);
- if(ptr != NULL)
+ if (ptr != NULL)
dlclose(ptr);
- return(0);
+ return (0);
}
-static int dlfcn_unload(DSO *dso)
- {
+static int
+dlfcn_unload(DSO *dso)
+{
void *ptr;
- if(dso == NULL)
- {
- DSOerr(DSO_F_DLFCN_UNLOAD,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(sk_void_num(dso->meth_data) < 1)
- return(1);
+ if (dso == NULL) {
+ DSOerr(DSO_F_DLFCN_UNLOAD, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (sk_void_num(dso->meth_data) < 1)
+ return (1);
ptr = sk_void_pop(dso->meth_data);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_UNLOAD,DSO_R_NULL_HANDLE);
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_UNLOAD, DSO_R_NULL_HANDLE);
/* Should push the value back onto the stack in
* case of a retry. */
sk_void_push(dso->meth_data, ptr);
- return(0);
- }
+ return (0);
+ }
/* For now I'm not aware of any errors associated with dlclose() */
dlclose(ptr);
- return(1);
- }
+ return (1);
+}
-static void *dlfcn_bind_var(DSO *dso, const char *symname)
- {
+static void *
+dlfcn_bind_var(DSO *dso, const char *symname)
+{
void *ptr, *sym;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(sk_void_num(dso->meth_data) < 1)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_STACK_ERROR);
- return(NULL);
- }
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (sk_void_num(dso->meth_data) < 1) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_STACK_ERROR);
+ return (NULL);
+ }
ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_NULL_HANDLE);
- return(NULL);
- }
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_NULL_HANDLE);
+ return (NULL);
+ }
sym = dlsym(ptr, symname);
- if(sym == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_SYM_FAILURE);
+ if (sym == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_SYM_FAILURE);
ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
- return(NULL);
- }
- return(sym);
+ return (NULL);
}
+ return (sym);
+}
-static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
- {
+static DSO_FUNC_TYPE
+dlfcn_bind_func(DSO *dso, const char *symname)
+{
void *ptr;
union {
DSO_FUNC_TYPE sym;
void *dlret;
} u;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(sk_void_num(dso->meth_data) < 1)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_STACK_ERROR);
- return(NULL);
- }
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (sk_void_num(dso->meth_data) < 1) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_STACK_ERROR);
+ return (NULL);
+ }
ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE);
- return(NULL);
- }
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_NULL_HANDLE);
+ return (NULL);
+ }
u.dlret = dlsym(ptr, symname);
- if(u.dlret == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE);
+ if (u.dlret == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_SYM_FAILURE);
ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
- return(NULL);
- }
- return u.sym;
+ return (NULL);
}
+ return u.sym;
+}
-static char *dlfcn_merger(DSO *dso, const char *filespec1,
- const char *filespec2)
- {
+static char *
+dlfcn_merger(DSO *dso, const char *filespec1, const char *filespec2)
+{
char *merged;
size_t len;
- if(!filespec1 && !filespec2)
- {
+ if (!filespec1 && !filespec2) {
DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
/* If the first file specification is a rooted path, it rules.
same goes if the second file specification is missing. */
- if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/'))
- {
+ if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/')) {
len = strlen(filespec1) + 1;
merged = malloc(len);
- if(!merged)
- {
+ if (!merged) {
DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(merged, filespec1, len);
+ return (NULL);
}
+ strlcpy(merged, filespec1, len);
+ }
/* If the first file specification is missing, the second one rules. */
- else if (!filespec1)
- {
+ else if (!filespec1) {
len = strlen(filespec2) + 1;
merged = malloc(strlen(filespec2) + 1);
- if(!merged)
- {
- DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(merged, filespec2, len);
+ if (!merged) {
+ DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
+ return (NULL);
}
- else
+ strlcpy(merged, filespec2, len);
+ } else
/* This part isn't as trivial as it looks. It assumes that
the second file specification really is a directory, and
makes no checks whatsoever. Therefore, the result becomes
the concatenation of filespec2 followed by a slash followed
by filespec1. */
- {
+ {
int spec2len, len;
spec2len = strlen(filespec2);
len = spec2len + (filespec1 ? strlen(filespec1) : 0);
- if(filespec2 && filespec2[spec2len - 1] == '/')
- {
+ if (filespec2 && filespec2[spec2len - 1] == '/') {
spec2len--;
len--;
- }
+ }
merged = malloc(len + 2);
- if(!merged)
- {
- DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
+ if (!merged) {
+ DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
+ return (NULL);
+ }
strlcpy(merged, filespec2, len + 2);
merged[spec2len] = '/';
strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len);
- }
- return(merged);
}
+ return (merged);
+}
#define DSO_ext ".so"
#define DSO_extlen 3
-static char *dlfcn_name_converter(DSO *dso, const char *filename)
- {
+static char *
+dlfcn_name_converter(DSO *dso, const char *filename)
+{
char *translated;
int len, rsize, transform;
len = strlen(filename);
rsize = len + 1;
transform = (strstr(filename, "/") == NULL);
- if(transform)
- {
+ if (transform) {
/* We will convert this to "%s.so" or "lib%s.so" etc */
rsize += DSO_extlen; /* The length of ".so" */
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
rsize += 3; /* The length of "lib" */
- }
+ }
translated = malloc(rsize);
- if(translated == NULL)
- {
+ if (translated == NULL) {
DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
- DSO_R_NAME_TRANSLATION_FAILED);
- return(NULL);
- }
- if(transform)
- {
+ DSO_R_NAME_TRANSLATION_FAILED);
+ return (NULL);
+ }
+ if (transform) {
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
snprintf(translated, rsize, "lib%s" DSO_ext, filename);
else
snprintf(translated, rsize, "%s" DSO_ext, filename);
- }
- else
+ } else
snprintf(translated, rsize, "%s", filename);
- return(translated);
- }
+ return (translated);
+}
-static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
- {
+static int
+dlfcn_pathbyaddr(void *addr, char *path, int sz)
+{
Dl_info dli;
int len;
- if (addr == NULL)
- {
- union { int(*f)(void*,char*,int); void *p; } t =
- { dlfcn_pathbyaddr };
+ if (addr == NULL) {
+ union{
+ int(*f)(void*, char*, int);
+ void *p;
+ } t = { dlfcn_pathbyaddr };
addr = t.p;
- }
+ }
- if (dladdr(addr,&dli))
- {
+ if (dladdr(addr, &dli)) {
len = (int)strlen(dli.dli_fname);
- if (sz <= 0) return len+1;
- if (len >= sz) len=sz-1;
- memcpy(path,dli.dli_fname,len);
- path[len++]=0;
+ if (sz <= 0)
+ return len + 1;
+ if (len >= sz)
+ len = sz - 1;
+ memcpy(path, dli.dli_fname, len);
+ path[len++] = 0;
return len;
- }
+ }
ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror());
return -1;
- }
+}
-static void *dlfcn_globallookup(const char *name)
- {
- void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
-
- if (handle)
- {
- ret = dlsym(handle,name);
+static void *
+dlfcn_globallookup(const char *name)
+{
+ void *ret = NULL, *handle = dlopen(NULL, RTLD_LAZY);
+
+ if (handle) {
+ ret = dlsym(handle, name);
dlclose(handle);
- }
+ }
return ret;
- }
+}
#endif /* DSO_DLFCN */
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
#define ERR_FUNC(func) ERR_PACK(ERR_LIB_DSO,func,0)
#define ERR_REASON(reason) ERR_PACK(ERR_LIB_DSO,0,reason)
-static ERR_STRING_DATA DSO_str_functs[]=
- {
-{ERR_FUNC(DSO_F_BEOS_BIND_FUNC), "BEOS_BIND_FUNC"},
-{ERR_FUNC(DSO_F_BEOS_BIND_VAR), "BEOS_BIND_VAR"},
-{ERR_FUNC(DSO_F_BEOS_LOAD), "BEOS_LOAD"},
-{ERR_FUNC(DSO_F_BEOS_NAME_CONVERTER), "BEOS_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_BEOS_UNLOAD), "BEOS_UNLOAD"},
-{ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "DLFCN_BIND_FUNC"},
-{ERR_FUNC(DSO_F_DLFCN_BIND_VAR), "DLFCN_BIND_VAR"},
-{ERR_FUNC(DSO_F_DLFCN_LOAD), "DLFCN_LOAD"},
-{ERR_FUNC(DSO_F_DLFCN_MERGER), "DLFCN_MERGER"},
-{ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "DLFCN_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_DLFCN_UNLOAD), "DLFCN_UNLOAD"},
-{ERR_FUNC(DSO_F_DL_BIND_FUNC), "DL_BIND_FUNC"},
-{ERR_FUNC(DSO_F_DL_BIND_VAR), "DL_BIND_VAR"},
-{ERR_FUNC(DSO_F_DL_LOAD), "DL_LOAD"},
-{ERR_FUNC(DSO_F_DL_MERGER), "DL_MERGER"},
-{ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "DL_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_DL_UNLOAD), "DL_UNLOAD"},
-{ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"},
-{ERR_FUNC(DSO_F_DSO_BIND_VAR), "DSO_bind_var"},
-{ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"},
-{ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"},
-{ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"},
-{ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"},
-{ERR_FUNC(DSO_F_DSO_GET_LOADED_FILENAME), "DSO_get_loaded_filename"},
-{ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"},
-{ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"},
-{ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"},
-{ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"},
-{ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"},
-{ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"},
-{ERR_FUNC(DSO_F_DSO_SET_NAME_CONVERTER), "DSO_set_name_converter"},
-{ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"},
-{ERR_FUNC(DSO_F_GLOBAL_LOOKUP_FUNC), "GLOBAL_LOOKUP_FUNC"},
-{ERR_FUNC(DSO_F_PATHBYADDR), "PATHBYADDR"},
-{ERR_FUNC(DSO_F_VMS_BIND_SYM), "VMS_BIND_SYM"},
-{ERR_FUNC(DSO_F_VMS_LOAD), "VMS_LOAD"},
-{ERR_FUNC(DSO_F_VMS_MERGER), "VMS_MERGER"},
-{ERR_FUNC(DSO_F_VMS_UNLOAD), "VMS_UNLOAD"},
-{ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "WIN32_BIND_FUNC"},
-{ERR_FUNC(DSO_F_WIN32_BIND_VAR), "WIN32_BIND_VAR"},
-{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "WIN32_GLOBALLOOKUP"},
-{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP_FUNC), "WIN32_GLOBALLOOKUP_FUNC"},
-{ERR_FUNC(DSO_F_WIN32_JOINER), "WIN32_JOINER"},
-{ERR_FUNC(DSO_F_WIN32_LOAD), "WIN32_LOAD"},
-{ERR_FUNC(DSO_F_WIN32_MERGER), "WIN32_MERGER"},
-{ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "WIN32_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "WIN32_PATHBYADDR"},
-{ERR_FUNC(DSO_F_WIN32_SPLITTER), "WIN32_SPLITTER"},
-{ERR_FUNC(DSO_F_WIN32_UNLOAD), "WIN32_UNLOAD"},
-{0,NULL}
- };
+static ERR_STRING_DATA DSO_str_functs[]= {
+ {ERR_FUNC(DSO_F_BEOS_BIND_FUNC), "BEOS_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_BEOS_BIND_VAR), "BEOS_BIND_VAR"},
+ {ERR_FUNC(DSO_F_BEOS_LOAD), "BEOS_LOAD"},
+ {ERR_FUNC(DSO_F_BEOS_NAME_CONVERTER), "BEOS_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_BEOS_UNLOAD), "BEOS_UNLOAD"},
+ {ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "DLFCN_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_DLFCN_BIND_VAR), "DLFCN_BIND_VAR"},
+ {ERR_FUNC(DSO_F_DLFCN_LOAD), "DLFCN_LOAD"},
+ {ERR_FUNC(DSO_F_DLFCN_MERGER), "DLFCN_MERGER"},
+ {ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "DLFCN_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_DLFCN_UNLOAD), "DLFCN_UNLOAD"},
+ {ERR_FUNC(DSO_F_DL_BIND_FUNC), "DL_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_DL_BIND_VAR), "DL_BIND_VAR"},
+ {ERR_FUNC(DSO_F_DL_LOAD), "DL_LOAD"},
+ {ERR_FUNC(DSO_F_DL_MERGER), "DL_MERGER"},
+ {ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "DL_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_DL_UNLOAD), "DL_UNLOAD"},
+ {ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"},
+ {ERR_FUNC(DSO_F_DSO_BIND_VAR), "DSO_bind_var"},
+ {ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"},
+ {ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"},
+ {ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"},
+ {ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"},
+ {ERR_FUNC(DSO_F_DSO_GET_LOADED_FILENAME), "DSO_get_loaded_filename"},
+ {ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"},
+ {ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"},
+ {ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"},
+ {ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"},
+ {ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"},
+ {ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"},
+ {ERR_FUNC(DSO_F_DSO_SET_NAME_CONVERTER), "DSO_set_name_converter"},
+ {ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"},
+ {ERR_FUNC(DSO_F_GLOBAL_LOOKUP_FUNC), "GLOBAL_LOOKUP_FUNC"},
+ {ERR_FUNC(DSO_F_PATHBYADDR), "PATHBYADDR"},
+ {ERR_FUNC(DSO_F_VMS_BIND_SYM), "VMS_BIND_SYM"},
+ {ERR_FUNC(DSO_F_VMS_LOAD), "VMS_LOAD"},
+ {ERR_FUNC(DSO_F_VMS_MERGER), "VMS_MERGER"},
+ {ERR_FUNC(DSO_F_VMS_UNLOAD), "VMS_UNLOAD"},
+ {ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "WIN32_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_WIN32_BIND_VAR), "WIN32_BIND_VAR"},
+ {ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "WIN32_GLOBALLOOKUP"},
+ {ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP_FUNC), "WIN32_GLOBALLOOKUP_FUNC"},
+ {ERR_FUNC(DSO_F_WIN32_JOINER), "WIN32_JOINER"},
+ {ERR_FUNC(DSO_F_WIN32_LOAD), "WIN32_LOAD"},
+ {ERR_FUNC(DSO_F_WIN32_MERGER), "WIN32_MERGER"},
+ {ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "WIN32_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "WIN32_PATHBYADDR"},
+ {ERR_FUNC(DSO_F_WIN32_SPLITTER), "WIN32_SPLITTER"},
+ {ERR_FUNC(DSO_F_WIN32_UNLOAD), "WIN32_UNLOAD"},
+ {0, NULL}
+};
-static ERR_STRING_DATA DSO_str_reasons[]=
- {
-{ERR_REASON(DSO_R_CTRL_FAILED) ,"control command failed"},
-{ERR_REASON(DSO_R_DSO_ALREADY_LOADED) ,"dso already loaded"},
-{ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE) ,"empty file structure"},
-{ERR_REASON(DSO_R_FAILURE) ,"failure"},
-{ERR_REASON(DSO_R_FILENAME_TOO_BIG) ,"filename too big"},
-{ERR_REASON(DSO_R_FINISH_FAILED) ,"cleanup method function failed"},
-{ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX) ,"incorrect file syntax"},
-{ERR_REASON(DSO_R_LOAD_FAILED) ,"could not load the shared library"},
-{ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED),"name translation failed"},
-{ERR_REASON(DSO_R_NO_FILENAME) ,"no filename"},
-{ERR_REASON(DSO_R_NO_FILE_SPECIFICATION) ,"no file specification"},
-{ERR_REASON(DSO_R_NULL_HANDLE) ,"a null shared library handle was used"},
-{ERR_REASON(DSO_R_SET_FILENAME_FAILED) ,"set filename failed"},
-{ERR_REASON(DSO_R_STACK_ERROR) ,"the meth_data stack is corrupt"},
-{ERR_REASON(DSO_R_SYM_FAILURE) ,"could not bind to the requested symbol name"},
-{ERR_REASON(DSO_R_UNLOAD_FAILED) ,"could not unload the shared library"},
-{ERR_REASON(DSO_R_UNSUPPORTED) ,"functionality not supported"},
-{0,NULL}
- };
+static ERR_STRING_DATA DSO_str_reasons[]= {
+ {ERR_REASON(DSO_R_CTRL_FAILED) , "control command failed"},
+ {ERR_REASON(DSO_R_DSO_ALREADY_LOADED) , "dso already loaded"},
+ {ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE) , "empty file structure"},
+ {ERR_REASON(DSO_R_FAILURE) , "failure"},
+ {ERR_REASON(DSO_R_FILENAME_TOO_BIG) , "filename too big"},
+ {ERR_REASON(DSO_R_FINISH_FAILED) , "cleanup method function failed"},
+ {ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX) , "incorrect file syntax"},
+ {ERR_REASON(DSO_R_LOAD_FAILED) , "could not load the shared library"},
+ {ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED), "name translation failed"},
+ {ERR_REASON(DSO_R_NO_FILENAME) , "no filename"},
+ {ERR_REASON(DSO_R_NO_FILE_SPECIFICATION) , "no file specification"},
+ {ERR_REASON(DSO_R_NULL_HANDLE) , "a null shared library handle was used"},
+ {ERR_REASON(DSO_R_SET_FILENAME_FAILED) , "set filename failed"},
+ {ERR_REASON(DSO_R_STACK_ERROR) , "the meth_data stack is corrupt"},
+ {ERR_REASON(DSO_R_SYM_FAILURE) , "could not bind to the requested symbol name"},
+ {ERR_REASON(DSO_R_UNLOAD_FAILED) , "could not unload the shared library"},
+ {ERR_REASON(DSO_R_UNSUPPORTED) , "functionality not supported"},
+ {0, NULL}
+};
#endif
-void ERR_load_DSO_strings(void)
- {
+void
+ERR_load_DSO_strings(void)
+{
#ifndef OPENSSL_NO_ERR
-
- if (ERR_func_error_string(DSO_str_functs[0].error) == NULL)
- {
- ERR_load_strings(0,DSO_str_functs);
- ERR_load_strings(0,DSO_str_reasons);
- }
-#endif
+ if (ERR_func_error_string(DSO_str_functs[0].error) == NULL) {
+ ERR_load_strings(0, DSO_str_functs);
+ ERR_load_strings(0, DSO_str_reasons);
}
+#endif
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
static DSO_METHOD *default_DSO_meth = NULL;
-DSO *DSO_new(void)
- {
- return(DSO_new_method(NULL));
- }
+DSO *
+DSO_new(void)
+{
+ return (DSO_new_method(NULL));
+}
-void DSO_set_default_method(DSO_METHOD *meth)
- {
+void
+DSO_set_default_method(DSO_METHOD *meth)
+{
default_DSO_meth = meth;
- }
-
-DSO_METHOD *DSO_get_default_method(void)
- {
- return(default_DSO_meth);
- }
-
-DSO_METHOD *DSO_get_method(DSO *dso)
- {
- return(dso->meth);
- }
-
-DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth)
- {
+}
+
+DSO_METHOD *
+DSO_get_default_method(void)
+{
+ return (default_DSO_meth);
+}
+
+DSO_METHOD *
+DSO_get_method(DSO *dso)
+{
+ return (dso->meth);
+}
+
+DSO_METHOD *
+DSO_set_method(DSO *dso, DSO_METHOD *meth)
+{
DSO_METHOD *mtmp;
+
mtmp = dso->meth;
dso->meth = meth;
- return(mtmp);
- }
+ return (mtmp);
+}
-DSO *DSO_new_method(DSO_METHOD *meth)
- {
+DSO *
+DSO_new_method(DSO_METHOD *meth)
+{
DSO *ret;
- if(default_DSO_meth == NULL)
+ if (default_DSO_meth == NULL)
/* We default to DSO_METH_openssl() which in turn defaults
* to stealing the "best available" method. Will fallback
* to DSO_METH_null() in the worst case. */
default_DSO_meth = DSO_METHOD_openssl();
ret = (DSO *)malloc(sizeof(DSO));
- if(ret == NULL)
- {
- DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
+ if (ret == NULL) {
+ DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE);
+ return (NULL);
+ }
memset(ret, 0, sizeof(DSO));
ret->meth_data = sk_void_new_null();
- if(ret->meth_data == NULL)
- {
+ if (ret->meth_data == NULL) {
/* sk_new doesn't generate any errors so we do */
- DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
+ DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE);
free(ret);
- return(NULL);
- }
- if(meth == NULL)
+ return (NULL);
+ }
+ if (meth == NULL)
ret->meth = default_DSO_meth;
else
ret->meth = meth;
ret->references = 1;
- if((ret->meth->init != NULL) && !ret->meth->init(ret))
- {
+ if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
free(ret);
- ret=NULL;
- }
- return(ret);
+ ret = NULL;
}
+ return (ret);
+}
-int DSO_free(DSO *dso)
- {
- int i;
-
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_FREE,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
-
- i=CRYPTO_add(&dso->references,-1,CRYPTO_LOCK_DSO);
- if(i > 0) return(1);
-
- if((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso))
- {
- DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED);
- return(0);
- }
-
- if((dso->meth->finish != NULL) && !dso->meth->finish(dso))
- {
- DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED);
- return(0);
- }
-
- sk_void_free(dso->meth_data);
- if(dso->filename != NULL)
- free(dso->filename);
- if(dso->loaded_filename != NULL)
- free(dso->loaded_filename);
-
- free(dso);
- return(1);
+int
+DSO_free(DSO *dso)
+{
+ int i;
+
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_FREE, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
}
-int DSO_flags(DSO *dso)
- {
- return((dso == NULL) ? 0 : dso->flags);
+ i = CRYPTO_add(&dso->references, -1, CRYPTO_LOCK_DSO);
+ if (i > 0)
+ return (1);
+
+ if ((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso)) {
+ DSOerr(DSO_F_DSO_FREE, DSO_R_UNLOAD_FAILED);
+ return (0);
}
+ if ((dso->meth->finish != NULL) && !dso->meth->finish(dso)) {
+ DSOerr(DSO_F_DSO_FREE, DSO_R_FINISH_FAILED);
+ return (0);
+ }
-int DSO_up_ref(DSO *dso)
- {
- if (dso == NULL)
- {
- DSOerr(DSO_F_DSO_UP_REF,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
+ sk_void_free(dso->meth_data);
+ if (dso->filename != NULL)
+ free(dso->filename);
+ if (dso->loaded_filename != NULL)
+ free(dso->loaded_filename);
- CRYPTO_add(&dso->references,1,CRYPTO_LOCK_DSO);
- return(1);
+ free(dso);
+ return (1);
+}
+
+int
+DSO_flags(DSO *dso)
+{
+ return ((dso == NULL) ? 0 : dso->flags);
+}
+
+
+int
+DSO_up_ref(DSO *dso)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_UP_REF, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
}
-DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
- {
+ CRYPTO_add(&dso->references, 1, CRYPTO_LOCK_DSO);
+ return (1);
+}
+
+DSO *
+DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
+{
DSO *ret;
int allocated = 0;
- if(dso == NULL)
- {
+ if (dso == NULL) {
ret = DSO_new_method(meth);
- if(ret == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,ERR_R_MALLOC_FAILURE);
+ if (ret == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, ERR_R_MALLOC_FAILURE);
goto err;
- }
+ }
allocated = 1;
/* Pass the provided flags to the new DSO object */
- if(DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_CTRL_FAILED);
+ if (DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_CTRL_FAILED);
goto err;
- }
}
- else
+ } else
ret = dso;
/* Don't load if we're currently already loaded */
- if(ret->filename != NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_DSO_ALREADY_LOADED);
+ if (ret->filename != NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_DSO_ALREADY_LOADED);
goto err;
- }
+ }
/* filename can only be NULL if we were passed a dso that already has
* one set. */
- if(filename != NULL)
- if(!DSO_set_filename(ret, filename))
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_SET_FILENAME_FAILED);
- goto err;
- }
+ if (filename != NULL)
+ if (!DSO_set_filename(ret, filename)) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_SET_FILENAME_FAILED);
+ goto err;
+ }
filename = ret->filename;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_NO_FILENAME);
+ if (filename == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_NO_FILENAME);
goto err;
- }
- if(ret->meth->dso_load == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);
+ }
+ if (ret->meth->dso_load == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_UNSUPPORTED);
goto err;
- }
- if(!ret->meth->dso_load(ret))
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_LOAD_FAILED);
+ }
+ if (!ret->meth->dso_load(ret)) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_LOAD_FAILED);
goto err;
- }
+ }
/* Load succeeded */
- return(ret);
+ return (ret);
+
err:
- if(allocated)
+ if (allocated)
DSO_free(ret);
- return(NULL);
- }
+ return (NULL);
+}
-void *DSO_bind_var(DSO *dso, const char *symname)
- {
+void *
+DSO_bind_var(DSO *dso, const char *symname)
+{
void *ret = NULL;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DSO_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(dso->meth->dso_bind_var == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_UNSUPPORTED);
- return(NULL);
- }
- if((ret = dso->meth->dso_bind_var(dso, symname)) == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_SYM_FAILURE);
- return(NULL);
- }
- /* Success */
- return(ret);
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DSO_BIND_VAR, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (dso->meth->dso_bind_var == NULL) {
+ DSOerr(DSO_F_DSO_BIND_VAR, DSO_R_UNSUPPORTED);
+ return (NULL);
}
+ if ((ret = dso->meth->dso_bind_var(dso, symname)) == NULL) {
+ DSOerr(DSO_F_DSO_BIND_VAR, DSO_R_SYM_FAILURE);
+ return (NULL);
+ }
+ /* Success */
+ return (ret);
+}
-DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname)
- {
+DSO_FUNC_TYPE
+DSO_bind_func(DSO *dso, const char *symname)
+{
DSO_FUNC_TYPE ret = NULL;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(dso->meth->dso_bind_func == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_UNSUPPORTED);
- return(NULL);
- }
- if((ret = dso->meth->dso_bind_func(dso, symname)) == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_SYM_FAILURE);
- return(NULL);
- }
- /* Success */
- return(ret);
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ if (dso->meth->dso_bind_func == NULL) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_UNSUPPORTED);
+ return (NULL);
+ }
+ if ((ret = dso->meth->dso_bind_func(dso, symname)) == NULL) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_SYM_FAILURE);
+ return (NULL);
+ }
+ /* Success */
+ return (ret);
+}
/* I don't really like these *_ctrl functions very much to be perfectly
* honest. For one thing, I think I have to return a negative value for
* odd times. I'd prefer "output" values to be passed by reference and
* the return value as success/failure like usual ... but we conform
* when we must... :-) */
-long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
- {
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_CTRL,ERR_R_PASSED_NULL_PARAMETER);
- return(-1);
- }
+long
+DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_CTRL, ERR_R_PASSED_NULL_PARAMETER);
+ return (-1);
+ }
/* We should intercept certain generic commands and only pass control
* to the method-specific ctrl() function if it's something we don't
* handle. */
- switch(cmd)
- {
+ switch (cmd) {
case DSO_CTRL_GET_FLAGS:
return dso->flags;
case DSO_CTRL_SET_FLAGS:
dso->flags = (int)larg;
- return(0);
+ return (0);
case DSO_CTRL_OR_FLAGS:
dso->flags |= (int)larg;
- return(0);
+ return (0);
default:
break;
- }
- if((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL))
- {
- DSOerr(DSO_F_DSO_CTRL,DSO_R_UNSUPPORTED);
- return(-1);
- }
- return(dso->meth->dso_ctrl(dso,cmd,larg,parg));
}
-
-int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
- DSO_NAME_CONVERTER_FUNC *oldcb)
- {
- if(dso == NULL)
- {
+ if ((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL)) {
+ DSOerr(DSO_F_DSO_CTRL, DSO_R_UNSUPPORTED);
+ return (-1);
+ }
+ return (dso->meth->dso_ctrl(dso, cmd, larg, parg));
+}
+
+int
+DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
+ DSO_NAME_CONVERTER_FUNC *oldcb)
+{
+ if (dso == NULL) {
DSOerr(DSO_F_DSO_SET_NAME_CONVERTER,
- ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(oldcb)
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (oldcb)
*oldcb = dso->name_converter;
dso->name_converter = cb;
- return(1);
- }
-
-const char *DSO_get_filename(DSO *dso)
- {
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_GET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- return(dso->filename);
+ return (1);
+}
+
+const char *
+DSO_get_filename(DSO *dso)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_GET_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ return (dso->filename);
+}
-int DSO_set_filename(DSO *dso, const char *filename)
- {
+int
+DSO_set_filename(DSO *dso, const char *filename)
+{
char *copied;
- if((dso == NULL) || (filename == NULL))
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(dso->loaded_filename)
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,DSO_R_DSO_ALREADY_LOADED);
- return(0);
- }
+ if ((dso == NULL) || (filename == NULL)) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (dso->loaded_filename) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, DSO_R_DSO_ALREADY_LOADED);
+ return (0);
+ }
/* We'll duplicate filename */
copied = malloc(strlen(filename) + 1);
- if(copied == NULL)
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_MALLOC_FAILURE);
- return(0);
- }
+ if (copied == NULL) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_MALLOC_FAILURE);
+ return (0);
+ }
strlcpy(copied, filename, strlen(filename) + 1);
- if(dso->filename)
+ if (dso->filename)
free(dso->filename);
dso->filename = copied;
- return(1);
- }
+ return (1);
+}
-char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2)
- {
+char *
+DSO_merge(DSO *dso, const char *filespec1, const char *filespec2)
+{
char *result = NULL;
- if(dso == NULL || filespec1 == NULL)
- {
- DSOerr(DSO_F_DSO_MERGE,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
- {
- if(dso->merger != NULL)
+ if (dso == NULL || filespec1 == NULL) {
+ DSOerr(DSO_F_DSO_MERGE, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
+ if (dso->merger != NULL)
result = dso->merger(dso, filespec1, filespec2);
- else if(dso->meth->dso_merger != NULL)
+ else if (dso->meth->dso_merger != NULL)
result = dso->meth->dso_merger(dso,
- filespec1, filespec2);
- }
- return(result);
+ filespec1, filespec2);
}
+ return (result);
+}
-char *DSO_convert_filename(DSO *dso, const char *filename)
- {
+char *
+DSO_convert_filename(DSO *dso, const char *filename)
+{
char *result = NULL;
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_CONVERT_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(filename == NULL)
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_CONVERT_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (filename == NULL)
filename = dso->filename;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DSO_CONVERT_FILENAME,DSO_R_NO_FILENAME);
- return(NULL);
- }
- if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
- {
- if(dso->name_converter != NULL)
+ if (filename == NULL) {
+ DSOerr(DSO_F_DSO_CONVERT_FILENAME, DSO_R_NO_FILENAME);
+ return (NULL);
+ }
+ if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
+ if (dso->name_converter != NULL)
result = dso->name_converter(dso, filename);
- else if(dso->meth->dso_name_converter != NULL)
+ else if (dso->meth->dso_name_converter != NULL)
result = dso->meth->dso_name_converter(dso, filename);
- }
- if(result == NULL)
- {
+ }
+ if (result == NULL) {
result = malloc(strlen(filename) + 1);
- if(result == NULL)
- {
+ if (result == NULL) {
DSOerr(DSO_F_DSO_CONVERT_FILENAME,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(result, filename, strlen(filename) + 1);
+ ERR_R_MALLOC_FAILURE);
+ return (NULL);
}
- return(result);
+ strlcpy(result, filename, strlen(filename) + 1);
}
+ return (result);
+}
-const char *DSO_get_loaded_filename(DSO *dso)
- {
- if(dso == NULL)
- {
+const char *
+DSO_get_loaded_filename(DSO *dso)
+{
+ if (dso == NULL) {
DSOerr(DSO_F_DSO_GET_LOADED_FILENAME,
- ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- return(dso->loaded_filename);
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ return (dso->loaded_filename);
+}
-int DSO_pathbyaddr(void *addr,char *path,int sz)
- {
+int
+DSO_pathbyaddr(void *addr, char *path, int sz)
+{
DSO_METHOD *meth = default_DSO_meth;
- if (meth == NULL) meth = DSO_METHOD_openssl();
- if (meth->pathbyaddr == NULL)
- {
- DSOerr(DSO_F_DSO_PATHBYADDR,DSO_R_UNSUPPORTED);
+ if (meth == NULL)
+ meth = DSO_METHOD_openssl();
+ if (meth->pathbyaddr == NULL) {
+ DSOerr(DSO_F_DSO_PATHBYADDR, DSO_R_UNSUPPORTED);
return -1;
- }
- return (*meth->pathbyaddr)(addr,path,sz);
}
+ return (*meth->pathbyaddr)(addr, path, sz);
+}
-void *DSO_global_lookup(const char *name)
- {
+void *
+DSO_global_lookup(const char *name)
+{
DSO_METHOD *meth = default_DSO_meth;
- if (meth == NULL) meth = DSO_METHOD_openssl();
- if (meth->globallookup == NULL)
- {
- DSOerr(DSO_F_DSO_GLOBAL_LOOKUP,DSO_R_UNSUPPORTED);
+ if (meth == NULL)
+ meth = DSO_METHOD_openssl();
+ if (meth->globallookup == NULL) {
+ DSOerr(DSO_F_DSO_GLOBAL_LOOKUP, DSO_R_UNSUPPORTED);
return NULL;
- }
- return (*meth->globallookup)(name);
}
+ return (*meth->globallookup)(name);
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
NULL, /* finish */
NULL, /* pathbyaddr */
NULL /* globallookup */
- };
-
-DSO_METHOD *DSO_METHOD_null(void)
- {
- return(&dso_meth_null);
- }
+};
+DSO_METHOD *
+DSO_METHOD_null(void)
+{
+ return (&dso_meth_null);
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
/* We just pinch the method from an appropriate "default" method. */
-DSO_METHOD *DSO_METHOD_openssl(void)
- {
+DSO_METHOD *
+DSO_METHOD_openssl(void)
+{
#ifdef DEF_DSO_METHOD
- return(DEF_DSO_METHOD());
+ return (DEF_DSO_METHOD());
#elif defined(DSO_DLFCN)
- return(DSO_METHOD_dlfcn());
+ return (DSO_METHOD_dlfcn());
#else
- return(DSO_METHOD_null());
+ return (DSO_METHOD_null());
#endif
- }
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* first. */
typedef char* (*DSO_MERGER_FUNC)(DSO *, const char *, const char *);
-typedef struct dso_meth_st
- {
+typedef struct dso_meth_st {
const char *name;
/* Loads a shared library, NB: new DSO_METHODs must ensure that a
* successful load populates the loaded_filename field, and likewise a
int (*finish)(DSO *dso);
/* Return pathname of the module containing location */
- int (*pathbyaddr)(void *addr,char *path,int sz);
+ int (*pathbyaddr)(void *addr, char *path, int sz);
/* Perform global symbol lookup, i.e. among *all* modules */
void *(*globallookup)(const char *symname);
- } DSO_METHOD;
+} DSO_METHOD;
/**********************************************************************/
/* The low-level handle type used to refer to a loaded shared library */
-struct dso_st
- {
+struct dso_st {
DSO_METHOD *meth;
/* Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS
* doesn't use anything but will need to cache the filename
* corresponds to a loaded library or not, and (b) the filename with
* which it was actually loaded. */
char *loaded_filename;
- };
+};
DSO * DSO_new(void);
* oldcb is non-NULL then it is set to the function pointer value being
* replaced. Return value is non-zero for success. */
int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
- DSO_NAME_CONVERTER_FUNC *oldcb);
+ DSO_NAME_CONVERTER_FUNC *oldcb);
/* These functions can be used to get/set the platform-independant filename
* used for a DSO. NB: set will fail if the DSO is already loaded. */
const char *DSO_get_filename(DSO *dso);
* pathname of cryptolib itself is returned. Negative or zero
* return value denotes error.
*/
-int DSO_pathbyaddr(void *addr,char *path,int sz);
+int DSO_pathbyaddr(void *addr, char *path, int sz);
/* This function should be used with caution! It looks up symbols in
* *all* loaded modules and if module gets unloaded by somebody else
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
#include <openssl/dso.h>
#ifndef DSO_DLFCN
-DSO_METHOD *DSO_METHOD_dlfcn(void)
- {
+DSO_METHOD *
+DSO_METHOD_dlfcn(void)
+{
return NULL;
- }
+}
#else
#ifdef HAVE_DLFCN_H
#endif
static char *dlfcn_name_converter(DSO *dso, const char *filename);
static char *dlfcn_merger(DSO *dso, const char *filespec1,
- const char *filespec2);
-static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
+ const char *filespec2);
+static int dlfcn_pathbyaddr(void *addr, char *path, int sz);
static void *dlfcn_globallookup(const char *name);
static DSO_METHOD dso_meth_dlfcn = {
NULL, /* finish */
dlfcn_pathbyaddr,
dlfcn_globallookup
- };
+};
-DSO_METHOD *DSO_METHOD_dlfcn(void)
- {
- return(&dso_meth_dlfcn);
- }
+DSO_METHOD *
+DSO_METHOD_dlfcn(void)
+{
+ return (&dso_meth_dlfcn);
+}
/* For this DSO_METHOD, our meth_data STACK will contain;
* (i) the handle (void*) returned from dlopen().
*/
-static int dlfcn_load(DSO *dso)
- {
+static int
+dlfcn_load(DSO *dso)
+{
void *ptr = NULL;
/* See applicable comments in dso_dl.c */
char *filename = DSO_convert_filename(dso, NULL);
int flags = RTLD_LAZY;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
+ if (filename == NULL) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_NO_FILENAME);
goto err;
- }
+ }
if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
flags |= RTLD_GLOBAL;
ptr = dlopen(filename, flags);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_LOAD_FAILED);
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_LOAD_FAILED);
ERR_add_error_data(4, "filename(", filename, "): ", dlerror());
goto err;
- }
- if(!sk_void_push(dso->meth_data, (char *)ptr))
- {
- DSOerr(DSO_F_DLFCN_LOAD,DSO_R_STACK_ERROR);
+ }
+ if (!sk_void_push(dso->meth_data, (char *)ptr)) {
+ DSOerr(DSO_F_DLFCN_LOAD, DSO_R_STACK_ERROR);
goto err;
- }
+ }
/* Success */
dso->loaded_filename = filename;
- return(1);
+ return (1);
+
err:
/* Cleanup! */
- if(filename != NULL)
+ if (filename != NULL)
free(filename);
- if(ptr != NULL)
+ if (ptr != NULL)
dlclose(ptr);
- return(0);
+ return (0);
}
-static int dlfcn_unload(DSO *dso)
- {
+static int
+dlfcn_unload(DSO *dso)
+{
void *ptr;
- if(dso == NULL)
- {
- DSOerr(DSO_F_DLFCN_UNLOAD,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(sk_void_num(dso->meth_data) < 1)
- return(1);
+ if (dso == NULL) {
+ DSOerr(DSO_F_DLFCN_UNLOAD, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (sk_void_num(dso->meth_data) < 1)
+ return (1);
ptr = sk_void_pop(dso->meth_data);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_UNLOAD,DSO_R_NULL_HANDLE);
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_UNLOAD, DSO_R_NULL_HANDLE);
/* Should push the value back onto the stack in
* case of a retry. */
sk_void_push(dso->meth_data, ptr);
- return(0);
- }
+ return (0);
+ }
/* For now I'm not aware of any errors associated with dlclose() */
dlclose(ptr);
- return(1);
- }
+ return (1);
+}
-static void *dlfcn_bind_var(DSO *dso, const char *symname)
- {
+static void *
+dlfcn_bind_var(DSO *dso, const char *symname)
+{
void *ptr, *sym;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(sk_void_num(dso->meth_data) < 1)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_STACK_ERROR);
- return(NULL);
- }
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (sk_void_num(dso->meth_data) < 1) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_STACK_ERROR);
+ return (NULL);
+ }
ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_NULL_HANDLE);
- return(NULL);
- }
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_NULL_HANDLE);
+ return (NULL);
+ }
sym = dlsym(ptr, symname);
- if(sym == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_SYM_FAILURE);
+ if (sym == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_VAR, DSO_R_SYM_FAILURE);
ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
- return(NULL);
- }
- return(sym);
+ return (NULL);
}
+ return (sym);
+}
-static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
- {
+static DSO_FUNC_TYPE
+dlfcn_bind_func(DSO *dso, const char *symname)
+{
void *ptr;
union {
DSO_FUNC_TYPE sym;
void *dlret;
} u;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(sk_void_num(dso->meth_data) < 1)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_STACK_ERROR);
- return(NULL);
- }
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (sk_void_num(dso->meth_data) < 1) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_STACK_ERROR);
+ return (NULL);
+ }
ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
- if(ptr == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE);
- return(NULL);
- }
+ if (ptr == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_NULL_HANDLE);
+ return (NULL);
+ }
u.dlret = dlsym(ptr, symname);
- if(u.dlret == NULL)
- {
- DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE);
+ if (u.dlret == NULL) {
+ DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_SYM_FAILURE);
ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
- return(NULL);
- }
- return u.sym;
+ return (NULL);
}
+ return u.sym;
+}
-static char *dlfcn_merger(DSO *dso, const char *filespec1,
- const char *filespec2)
- {
+static char *
+dlfcn_merger(DSO *dso, const char *filespec1, const char *filespec2)
+{
char *merged;
size_t len;
- if(!filespec1 && !filespec2)
- {
+ if (!filespec1 && !filespec2) {
DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
/* If the first file specification is a rooted path, it rules.
same goes if the second file specification is missing. */
- if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/'))
- {
+ if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/')) {
len = strlen(filespec1) + 1;
merged = malloc(len);
- if(!merged)
- {
+ if (!merged) {
DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(merged, filespec1, len);
+ return (NULL);
}
+ strlcpy(merged, filespec1, len);
+ }
/* If the first file specification is missing, the second one rules. */
- else if (!filespec1)
- {
+ else if (!filespec1) {
len = strlen(filespec2) + 1;
merged = malloc(strlen(filespec2) + 1);
- if(!merged)
- {
- DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(merged, filespec2, len);
+ if (!merged) {
+ DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
+ return (NULL);
}
- else
+ strlcpy(merged, filespec2, len);
+ } else
/* This part isn't as trivial as it looks. It assumes that
the second file specification really is a directory, and
makes no checks whatsoever. Therefore, the result becomes
the concatenation of filespec2 followed by a slash followed
by filespec1. */
- {
+ {
int spec2len, len;
spec2len = strlen(filespec2);
len = spec2len + (filespec1 ? strlen(filespec1) : 0);
- if(filespec2 && filespec2[spec2len - 1] == '/')
- {
+ if (filespec2 && filespec2[spec2len - 1] == '/') {
spec2len--;
len--;
- }
+ }
merged = malloc(len + 2);
- if(!merged)
- {
- DSOerr(DSO_F_DLFCN_MERGER,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
+ if (!merged) {
+ DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
+ return (NULL);
+ }
strlcpy(merged, filespec2, len + 2);
merged[spec2len] = '/';
strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len);
- }
- return(merged);
}
+ return (merged);
+}
#define DSO_ext ".so"
#define DSO_extlen 3
-static char *dlfcn_name_converter(DSO *dso, const char *filename)
- {
+static char *
+dlfcn_name_converter(DSO *dso, const char *filename)
+{
char *translated;
int len, rsize, transform;
len = strlen(filename);
rsize = len + 1;
transform = (strstr(filename, "/") == NULL);
- if(transform)
- {
+ if (transform) {
/* We will convert this to "%s.so" or "lib%s.so" etc */
rsize += DSO_extlen; /* The length of ".so" */
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
rsize += 3; /* The length of "lib" */
- }
+ }
translated = malloc(rsize);
- if(translated == NULL)
- {
+ if (translated == NULL) {
DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
- DSO_R_NAME_TRANSLATION_FAILED);
- return(NULL);
- }
- if(transform)
- {
+ DSO_R_NAME_TRANSLATION_FAILED);
+ return (NULL);
+ }
+ if (transform) {
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
snprintf(translated, rsize, "lib%s" DSO_ext, filename);
else
snprintf(translated, rsize, "%s" DSO_ext, filename);
- }
- else
+ } else
snprintf(translated, rsize, "%s", filename);
- return(translated);
- }
+ return (translated);
+}
-static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
- {
+static int
+dlfcn_pathbyaddr(void *addr, char *path, int sz)
+{
Dl_info dli;
int len;
- if (addr == NULL)
- {
- union { int(*f)(void*,char*,int); void *p; } t =
- { dlfcn_pathbyaddr };
+ if (addr == NULL) {
+ union{
+ int(*f)(void*, char*, int);
+ void *p;
+ } t = { dlfcn_pathbyaddr };
addr = t.p;
- }
+ }
- if (dladdr(addr,&dli))
- {
+ if (dladdr(addr, &dli)) {
len = (int)strlen(dli.dli_fname);
- if (sz <= 0) return len+1;
- if (len >= sz) len=sz-1;
- memcpy(path,dli.dli_fname,len);
- path[len++]=0;
+ if (sz <= 0)
+ return len + 1;
+ if (len >= sz)
+ len = sz - 1;
+ memcpy(path, dli.dli_fname, len);
+ path[len++] = 0;
return len;
- }
+ }
ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror());
return -1;
- }
+}
-static void *dlfcn_globallookup(const char *name)
- {
- void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
-
- if (handle)
- {
- ret = dlsym(handle,name);
+static void *
+dlfcn_globallookup(const char *name)
+{
+ void *ret = NULL, *handle = dlopen(NULL, RTLD_LAZY);
+
+ if (handle) {
+ ret = dlsym(handle, name);
dlclose(handle);
- }
+ }
return ret;
- }
+}
#endif /* DSO_DLFCN */
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
#define ERR_FUNC(func) ERR_PACK(ERR_LIB_DSO,func,0)
#define ERR_REASON(reason) ERR_PACK(ERR_LIB_DSO,0,reason)
-static ERR_STRING_DATA DSO_str_functs[]=
- {
-{ERR_FUNC(DSO_F_BEOS_BIND_FUNC), "BEOS_BIND_FUNC"},
-{ERR_FUNC(DSO_F_BEOS_BIND_VAR), "BEOS_BIND_VAR"},
-{ERR_FUNC(DSO_F_BEOS_LOAD), "BEOS_LOAD"},
-{ERR_FUNC(DSO_F_BEOS_NAME_CONVERTER), "BEOS_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_BEOS_UNLOAD), "BEOS_UNLOAD"},
-{ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "DLFCN_BIND_FUNC"},
-{ERR_FUNC(DSO_F_DLFCN_BIND_VAR), "DLFCN_BIND_VAR"},
-{ERR_FUNC(DSO_F_DLFCN_LOAD), "DLFCN_LOAD"},
-{ERR_FUNC(DSO_F_DLFCN_MERGER), "DLFCN_MERGER"},
-{ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "DLFCN_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_DLFCN_UNLOAD), "DLFCN_UNLOAD"},
-{ERR_FUNC(DSO_F_DL_BIND_FUNC), "DL_BIND_FUNC"},
-{ERR_FUNC(DSO_F_DL_BIND_VAR), "DL_BIND_VAR"},
-{ERR_FUNC(DSO_F_DL_LOAD), "DL_LOAD"},
-{ERR_FUNC(DSO_F_DL_MERGER), "DL_MERGER"},
-{ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "DL_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_DL_UNLOAD), "DL_UNLOAD"},
-{ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"},
-{ERR_FUNC(DSO_F_DSO_BIND_VAR), "DSO_bind_var"},
-{ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"},
-{ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"},
-{ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"},
-{ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"},
-{ERR_FUNC(DSO_F_DSO_GET_LOADED_FILENAME), "DSO_get_loaded_filename"},
-{ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"},
-{ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"},
-{ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"},
-{ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"},
-{ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"},
-{ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"},
-{ERR_FUNC(DSO_F_DSO_SET_NAME_CONVERTER), "DSO_set_name_converter"},
-{ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"},
-{ERR_FUNC(DSO_F_GLOBAL_LOOKUP_FUNC), "GLOBAL_LOOKUP_FUNC"},
-{ERR_FUNC(DSO_F_PATHBYADDR), "PATHBYADDR"},
-{ERR_FUNC(DSO_F_VMS_BIND_SYM), "VMS_BIND_SYM"},
-{ERR_FUNC(DSO_F_VMS_LOAD), "VMS_LOAD"},
-{ERR_FUNC(DSO_F_VMS_MERGER), "VMS_MERGER"},
-{ERR_FUNC(DSO_F_VMS_UNLOAD), "VMS_UNLOAD"},
-{ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "WIN32_BIND_FUNC"},
-{ERR_FUNC(DSO_F_WIN32_BIND_VAR), "WIN32_BIND_VAR"},
-{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "WIN32_GLOBALLOOKUP"},
-{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP_FUNC), "WIN32_GLOBALLOOKUP_FUNC"},
-{ERR_FUNC(DSO_F_WIN32_JOINER), "WIN32_JOINER"},
-{ERR_FUNC(DSO_F_WIN32_LOAD), "WIN32_LOAD"},
-{ERR_FUNC(DSO_F_WIN32_MERGER), "WIN32_MERGER"},
-{ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "WIN32_NAME_CONVERTER"},
-{ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "WIN32_PATHBYADDR"},
-{ERR_FUNC(DSO_F_WIN32_SPLITTER), "WIN32_SPLITTER"},
-{ERR_FUNC(DSO_F_WIN32_UNLOAD), "WIN32_UNLOAD"},
-{0,NULL}
- };
+static ERR_STRING_DATA DSO_str_functs[]= {
+ {ERR_FUNC(DSO_F_BEOS_BIND_FUNC), "BEOS_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_BEOS_BIND_VAR), "BEOS_BIND_VAR"},
+ {ERR_FUNC(DSO_F_BEOS_LOAD), "BEOS_LOAD"},
+ {ERR_FUNC(DSO_F_BEOS_NAME_CONVERTER), "BEOS_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_BEOS_UNLOAD), "BEOS_UNLOAD"},
+ {ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "DLFCN_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_DLFCN_BIND_VAR), "DLFCN_BIND_VAR"},
+ {ERR_FUNC(DSO_F_DLFCN_LOAD), "DLFCN_LOAD"},
+ {ERR_FUNC(DSO_F_DLFCN_MERGER), "DLFCN_MERGER"},
+ {ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "DLFCN_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_DLFCN_UNLOAD), "DLFCN_UNLOAD"},
+ {ERR_FUNC(DSO_F_DL_BIND_FUNC), "DL_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_DL_BIND_VAR), "DL_BIND_VAR"},
+ {ERR_FUNC(DSO_F_DL_LOAD), "DL_LOAD"},
+ {ERR_FUNC(DSO_F_DL_MERGER), "DL_MERGER"},
+ {ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "DL_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_DL_UNLOAD), "DL_UNLOAD"},
+ {ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"},
+ {ERR_FUNC(DSO_F_DSO_BIND_VAR), "DSO_bind_var"},
+ {ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"},
+ {ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"},
+ {ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"},
+ {ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"},
+ {ERR_FUNC(DSO_F_DSO_GET_LOADED_FILENAME), "DSO_get_loaded_filename"},
+ {ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"},
+ {ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"},
+ {ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"},
+ {ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"},
+ {ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"},
+ {ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"},
+ {ERR_FUNC(DSO_F_DSO_SET_NAME_CONVERTER), "DSO_set_name_converter"},
+ {ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"},
+ {ERR_FUNC(DSO_F_GLOBAL_LOOKUP_FUNC), "GLOBAL_LOOKUP_FUNC"},
+ {ERR_FUNC(DSO_F_PATHBYADDR), "PATHBYADDR"},
+ {ERR_FUNC(DSO_F_VMS_BIND_SYM), "VMS_BIND_SYM"},
+ {ERR_FUNC(DSO_F_VMS_LOAD), "VMS_LOAD"},
+ {ERR_FUNC(DSO_F_VMS_MERGER), "VMS_MERGER"},
+ {ERR_FUNC(DSO_F_VMS_UNLOAD), "VMS_UNLOAD"},
+ {ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "WIN32_BIND_FUNC"},
+ {ERR_FUNC(DSO_F_WIN32_BIND_VAR), "WIN32_BIND_VAR"},
+ {ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "WIN32_GLOBALLOOKUP"},
+ {ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP_FUNC), "WIN32_GLOBALLOOKUP_FUNC"},
+ {ERR_FUNC(DSO_F_WIN32_JOINER), "WIN32_JOINER"},
+ {ERR_FUNC(DSO_F_WIN32_LOAD), "WIN32_LOAD"},
+ {ERR_FUNC(DSO_F_WIN32_MERGER), "WIN32_MERGER"},
+ {ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "WIN32_NAME_CONVERTER"},
+ {ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "WIN32_PATHBYADDR"},
+ {ERR_FUNC(DSO_F_WIN32_SPLITTER), "WIN32_SPLITTER"},
+ {ERR_FUNC(DSO_F_WIN32_UNLOAD), "WIN32_UNLOAD"},
+ {0, NULL}
+};
-static ERR_STRING_DATA DSO_str_reasons[]=
- {
-{ERR_REASON(DSO_R_CTRL_FAILED) ,"control command failed"},
-{ERR_REASON(DSO_R_DSO_ALREADY_LOADED) ,"dso already loaded"},
-{ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE) ,"empty file structure"},
-{ERR_REASON(DSO_R_FAILURE) ,"failure"},
-{ERR_REASON(DSO_R_FILENAME_TOO_BIG) ,"filename too big"},
-{ERR_REASON(DSO_R_FINISH_FAILED) ,"cleanup method function failed"},
-{ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX) ,"incorrect file syntax"},
-{ERR_REASON(DSO_R_LOAD_FAILED) ,"could not load the shared library"},
-{ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED),"name translation failed"},
-{ERR_REASON(DSO_R_NO_FILENAME) ,"no filename"},
-{ERR_REASON(DSO_R_NO_FILE_SPECIFICATION) ,"no file specification"},
-{ERR_REASON(DSO_R_NULL_HANDLE) ,"a null shared library handle was used"},
-{ERR_REASON(DSO_R_SET_FILENAME_FAILED) ,"set filename failed"},
-{ERR_REASON(DSO_R_STACK_ERROR) ,"the meth_data stack is corrupt"},
-{ERR_REASON(DSO_R_SYM_FAILURE) ,"could not bind to the requested symbol name"},
-{ERR_REASON(DSO_R_UNLOAD_FAILED) ,"could not unload the shared library"},
-{ERR_REASON(DSO_R_UNSUPPORTED) ,"functionality not supported"},
-{0,NULL}
- };
+static ERR_STRING_DATA DSO_str_reasons[]= {
+ {ERR_REASON(DSO_R_CTRL_FAILED) , "control command failed"},
+ {ERR_REASON(DSO_R_DSO_ALREADY_LOADED) , "dso already loaded"},
+ {ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE) , "empty file structure"},
+ {ERR_REASON(DSO_R_FAILURE) , "failure"},
+ {ERR_REASON(DSO_R_FILENAME_TOO_BIG) , "filename too big"},
+ {ERR_REASON(DSO_R_FINISH_FAILED) , "cleanup method function failed"},
+ {ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX) , "incorrect file syntax"},
+ {ERR_REASON(DSO_R_LOAD_FAILED) , "could not load the shared library"},
+ {ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED), "name translation failed"},
+ {ERR_REASON(DSO_R_NO_FILENAME) , "no filename"},
+ {ERR_REASON(DSO_R_NO_FILE_SPECIFICATION) , "no file specification"},
+ {ERR_REASON(DSO_R_NULL_HANDLE) , "a null shared library handle was used"},
+ {ERR_REASON(DSO_R_SET_FILENAME_FAILED) , "set filename failed"},
+ {ERR_REASON(DSO_R_STACK_ERROR) , "the meth_data stack is corrupt"},
+ {ERR_REASON(DSO_R_SYM_FAILURE) , "could not bind to the requested symbol name"},
+ {ERR_REASON(DSO_R_UNLOAD_FAILED) , "could not unload the shared library"},
+ {ERR_REASON(DSO_R_UNSUPPORTED) , "functionality not supported"},
+ {0, NULL}
+};
#endif
-void ERR_load_DSO_strings(void)
- {
+void
+ERR_load_DSO_strings(void)
+{
#ifndef OPENSSL_NO_ERR
-
- if (ERR_func_error_string(DSO_str_functs[0].error) == NULL)
- {
- ERR_load_strings(0,DSO_str_functs);
- ERR_load_strings(0,DSO_str_reasons);
- }
-#endif
+ if (ERR_func_error_string(DSO_str_functs[0].error) == NULL) {
+ ERR_load_strings(0, DSO_str_functs);
+ ERR_load_strings(0, DSO_str_reasons);
}
+#endif
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
static DSO_METHOD *default_DSO_meth = NULL;
-DSO *DSO_new(void)
- {
- return(DSO_new_method(NULL));
- }
+DSO *
+DSO_new(void)
+{
+ return (DSO_new_method(NULL));
+}
-void DSO_set_default_method(DSO_METHOD *meth)
- {
+void
+DSO_set_default_method(DSO_METHOD *meth)
+{
default_DSO_meth = meth;
- }
-
-DSO_METHOD *DSO_get_default_method(void)
- {
- return(default_DSO_meth);
- }
-
-DSO_METHOD *DSO_get_method(DSO *dso)
- {
- return(dso->meth);
- }
-
-DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth)
- {
+}
+
+DSO_METHOD *
+DSO_get_default_method(void)
+{
+ return (default_DSO_meth);
+}
+
+DSO_METHOD *
+DSO_get_method(DSO *dso)
+{
+ return (dso->meth);
+}
+
+DSO_METHOD *
+DSO_set_method(DSO *dso, DSO_METHOD *meth)
+{
DSO_METHOD *mtmp;
+
mtmp = dso->meth;
dso->meth = meth;
- return(mtmp);
- }
+ return (mtmp);
+}
-DSO *DSO_new_method(DSO_METHOD *meth)
- {
+DSO *
+DSO_new_method(DSO_METHOD *meth)
+{
DSO *ret;
- if(default_DSO_meth == NULL)
+ if (default_DSO_meth == NULL)
/* We default to DSO_METH_openssl() which in turn defaults
* to stealing the "best available" method. Will fallback
* to DSO_METH_null() in the worst case. */
default_DSO_meth = DSO_METHOD_openssl();
ret = (DSO *)malloc(sizeof(DSO));
- if(ret == NULL)
- {
- DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
+ if (ret == NULL) {
+ DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE);
+ return (NULL);
+ }
memset(ret, 0, sizeof(DSO));
ret->meth_data = sk_void_new_null();
- if(ret->meth_data == NULL)
- {
+ if (ret->meth_data == NULL) {
/* sk_new doesn't generate any errors so we do */
- DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
+ DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE);
free(ret);
- return(NULL);
- }
- if(meth == NULL)
+ return (NULL);
+ }
+ if (meth == NULL)
ret->meth = default_DSO_meth;
else
ret->meth = meth;
ret->references = 1;
- if((ret->meth->init != NULL) && !ret->meth->init(ret))
- {
+ if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
free(ret);
- ret=NULL;
- }
- return(ret);
+ ret = NULL;
}
+ return (ret);
+}
-int DSO_free(DSO *dso)
- {
- int i;
-
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_FREE,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
-
- i=CRYPTO_add(&dso->references,-1,CRYPTO_LOCK_DSO);
- if(i > 0) return(1);
-
- if((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso))
- {
- DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED);
- return(0);
- }
-
- if((dso->meth->finish != NULL) && !dso->meth->finish(dso))
- {
- DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED);
- return(0);
- }
-
- sk_void_free(dso->meth_data);
- if(dso->filename != NULL)
- free(dso->filename);
- if(dso->loaded_filename != NULL)
- free(dso->loaded_filename);
-
- free(dso);
- return(1);
+int
+DSO_free(DSO *dso)
+{
+ int i;
+
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_FREE, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
}
-int DSO_flags(DSO *dso)
- {
- return((dso == NULL) ? 0 : dso->flags);
+ i = CRYPTO_add(&dso->references, -1, CRYPTO_LOCK_DSO);
+ if (i > 0)
+ return (1);
+
+ if ((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso)) {
+ DSOerr(DSO_F_DSO_FREE, DSO_R_UNLOAD_FAILED);
+ return (0);
}
+ if ((dso->meth->finish != NULL) && !dso->meth->finish(dso)) {
+ DSOerr(DSO_F_DSO_FREE, DSO_R_FINISH_FAILED);
+ return (0);
+ }
-int DSO_up_ref(DSO *dso)
- {
- if (dso == NULL)
- {
- DSOerr(DSO_F_DSO_UP_REF,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
+ sk_void_free(dso->meth_data);
+ if (dso->filename != NULL)
+ free(dso->filename);
+ if (dso->loaded_filename != NULL)
+ free(dso->loaded_filename);
- CRYPTO_add(&dso->references,1,CRYPTO_LOCK_DSO);
- return(1);
+ free(dso);
+ return (1);
+}
+
+int
+DSO_flags(DSO *dso)
+{
+ return ((dso == NULL) ? 0 : dso->flags);
+}
+
+
+int
+DSO_up_ref(DSO *dso)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_UP_REF, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
}
-DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
- {
+ CRYPTO_add(&dso->references, 1, CRYPTO_LOCK_DSO);
+ return (1);
+}
+
+DSO *
+DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
+{
DSO *ret;
int allocated = 0;
- if(dso == NULL)
- {
+ if (dso == NULL) {
ret = DSO_new_method(meth);
- if(ret == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,ERR_R_MALLOC_FAILURE);
+ if (ret == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, ERR_R_MALLOC_FAILURE);
goto err;
- }
+ }
allocated = 1;
/* Pass the provided flags to the new DSO object */
- if(DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_CTRL_FAILED);
+ if (DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_CTRL_FAILED);
goto err;
- }
}
- else
+ } else
ret = dso;
/* Don't load if we're currently already loaded */
- if(ret->filename != NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_DSO_ALREADY_LOADED);
+ if (ret->filename != NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_DSO_ALREADY_LOADED);
goto err;
- }
+ }
/* filename can only be NULL if we were passed a dso that already has
* one set. */
- if(filename != NULL)
- if(!DSO_set_filename(ret, filename))
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_SET_FILENAME_FAILED);
- goto err;
- }
+ if (filename != NULL)
+ if (!DSO_set_filename(ret, filename)) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_SET_FILENAME_FAILED);
+ goto err;
+ }
filename = ret->filename;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_NO_FILENAME);
+ if (filename == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_NO_FILENAME);
goto err;
- }
- if(ret->meth->dso_load == NULL)
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);
+ }
+ if (ret->meth->dso_load == NULL) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_UNSUPPORTED);
goto err;
- }
- if(!ret->meth->dso_load(ret))
- {
- DSOerr(DSO_F_DSO_LOAD,DSO_R_LOAD_FAILED);
+ }
+ if (!ret->meth->dso_load(ret)) {
+ DSOerr(DSO_F_DSO_LOAD, DSO_R_LOAD_FAILED);
goto err;
- }
+ }
/* Load succeeded */
- return(ret);
+ return (ret);
+
err:
- if(allocated)
+ if (allocated)
DSO_free(ret);
- return(NULL);
- }
+ return (NULL);
+}
-void *DSO_bind_var(DSO *dso, const char *symname)
- {
+void *
+DSO_bind_var(DSO *dso, const char *symname)
+{
void *ret = NULL;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DSO_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(dso->meth->dso_bind_var == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_UNSUPPORTED);
- return(NULL);
- }
- if((ret = dso->meth->dso_bind_var(dso, symname)) == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_SYM_FAILURE);
- return(NULL);
- }
- /* Success */
- return(ret);
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DSO_BIND_VAR, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (dso->meth->dso_bind_var == NULL) {
+ DSOerr(DSO_F_DSO_BIND_VAR, DSO_R_UNSUPPORTED);
+ return (NULL);
}
+ if ((ret = dso->meth->dso_bind_var(dso, symname)) == NULL) {
+ DSOerr(DSO_F_DSO_BIND_VAR, DSO_R_SYM_FAILURE);
+ return (NULL);
+ }
+ /* Success */
+ return (ret);
+}
-DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname)
- {
+DSO_FUNC_TYPE
+DSO_bind_func(DSO *dso, const char *symname)
+{
DSO_FUNC_TYPE ret = NULL;
- if((dso == NULL) || (symname == NULL))
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(dso->meth->dso_bind_func == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_UNSUPPORTED);
- return(NULL);
- }
- if((ret = dso->meth->dso_bind_func(dso, symname)) == NULL)
- {
- DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_SYM_FAILURE);
- return(NULL);
- }
- /* Success */
- return(ret);
+ if ((dso == NULL) || (symname == NULL)) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ if (dso->meth->dso_bind_func == NULL) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_UNSUPPORTED);
+ return (NULL);
+ }
+ if ((ret = dso->meth->dso_bind_func(dso, symname)) == NULL) {
+ DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_SYM_FAILURE);
+ return (NULL);
+ }
+ /* Success */
+ return (ret);
+}
/* I don't really like these *_ctrl functions very much to be perfectly
* honest. For one thing, I think I have to return a negative value for
* odd times. I'd prefer "output" values to be passed by reference and
* the return value as success/failure like usual ... but we conform
* when we must... :-) */
-long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
- {
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_CTRL,ERR_R_PASSED_NULL_PARAMETER);
- return(-1);
- }
+long
+DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_CTRL, ERR_R_PASSED_NULL_PARAMETER);
+ return (-1);
+ }
/* We should intercept certain generic commands and only pass control
* to the method-specific ctrl() function if it's something we don't
* handle. */
- switch(cmd)
- {
+ switch (cmd) {
case DSO_CTRL_GET_FLAGS:
return dso->flags;
case DSO_CTRL_SET_FLAGS:
dso->flags = (int)larg;
- return(0);
+ return (0);
case DSO_CTRL_OR_FLAGS:
dso->flags |= (int)larg;
- return(0);
+ return (0);
default:
break;
- }
- if((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL))
- {
- DSOerr(DSO_F_DSO_CTRL,DSO_R_UNSUPPORTED);
- return(-1);
- }
- return(dso->meth->dso_ctrl(dso,cmd,larg,parg));
}
-
-int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
- DSO_NAME_CONVERTER_FUNC *oldcb)
- {
- if(dso == NULL)
- {
+ if ((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL)) {
+ DSOerr(DSO_F_DSO_CTRL, DSO_R_UNSUPPORTED);
+ return (-1);
+ }
+ return (dso->meth->dso_ctrl(dso, cmd, larg, parg));
+}
+
+int
+DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
+ DSO_NAME_CONVERTER_FUNC *oldcb)
+{
+ if (dso == NULL) {
DSOerr(DSO_F_DSO_SET_NAME_CONVERTER,
- ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(oldcb)
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (oldcb)
*oldcb = dso->name_converter;
dso->name_converter = cb;
- return(1);
- }
-
-const char *DSO_get_filename(DSO *dso)
- {
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_GET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- return(dso->filename);
+ return (1);
+}
+
+const char *
+DSO_get_filename(DSO *dso)
+{
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_GET_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ return (dso->filename);
+}
-int DSO_set_filename(DSO *dso, const char *filename)
- {
+int
+DSO_set_filename(DSO *dso, const char *filename)
+{
char *copied;
- if((dso == NULL) || (filename == NULL))
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- if(dso->loaded_filename)
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,DSO_R_DSO_ALREADY_LOADED);
- return(0);
- }
+ if ((dso == NULL) || (filename == NULL)) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (0);
+ }
+ if (dso->loaded_filename) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, DSO_R_DSO_ALREADY_LOADED);
+ return (0);
+ }
/* We'll duplicate filename */
copied = malloc(strlen(filename) + 1);
- if(copied == NULL)
- {
- DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_MALLOC_FAILURE);
- return(0);
- }
+ if (copied == NULL) {
+ DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_MALLOC_FAILURE);
+ return (0);
+ }
strlcpy(copied, filename, strlen(filename) + 1);
- if(dso->filename)
+ if (dso->filename)
free(dso->filename);
dso->filename = copied;
- return(1);
- }
+ return (1);
+}
-char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2)
- {
+char *
+DSO_merge(DSO *dso, const char *filespec1, const char *filespec2)
+{
char *result = NULL;
- if(dso == NULL || filespec1 == NULL)
- {
- DSOerr(DSO_F_DSO_MERGE,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
- {
- if(dso->merger != NULL)
+ if (dso == NULL || filespec1 == NULL) {
+ DSOerr(DSO_F_DSO_MERGE, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
+ if (dso->merger != NULL)
result = dso->merger(dso, filespec1, filespec2);
- else if(dso->meth->dso_merger != NULL)
+ else if (dso->meth->dso_merger != NULL)
result = dso->meth->dso_merger(dso,
- filespec1, filespec2);
- }
- return(result);
+ filespec1, filespec2);
}
+ return (result);
+}
-char *DSO_convert_filename(DSO *dso, const char *filename)
- {
+char *
+DSO_convert_filename(DSO *dso, const char *filename)
+{
char *result = NULL;
- if(dso == NULL)
- {
- DSOerr(DSO_F_DSO_CONVERT_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- if(filename == NULL)
+ if (dso == NULL) {
+ DSOerr(DSO_F_DSO_CONVERT_FILENAME, ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
+ }
+ if (filename == NULL)
filename = dso->filename;
- if(filename == NULL)
- {
- DSOerr(DSO_F_DSO_CONVERT_FILENAME,DSO_R_NO_FILENAME);
- return(NULL);
- }
- if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
- {
- if(dso->name_converter != NULL)
+ if (filename == NULL) {
+ DSOerr(DSO_F_DSO_CONVERT_FILENAME, DSO_R_NO_FILENAME);
+ return (NULL);
+ }
+ if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
+ if (dso->name_converter != NULL)
result = dso->name_converter(dso, filename);
- else if(dso->meth->dso_name_converter != NULL)
+ else if (dso->meth->dso_name_converter != NULL)
result = dso->meth->dso_name_converter(dso, filename);
- }
- if(result == NULL)
- {
+ }
+ if (result == NULL) {
result = malloc(strlen(filename) + 1);
- if(result == NULL)
- {
+ if (result == NULL) {
DSOerr(DSO_F_DSO_CONVERT_FILENAME,
- ERR_R_MALLOC_FAILURE);
- return(NULL);
- }
- strlcpy(result, filename, strlen(filename) + 1);
+ ERR_R_MALLOC_FAILURE);
+ return (NULL);
}
- return(result);
+ strlcpy(result, filename, strlen(filename) + 1);
}
+ return (result);
+}
-const char *DSO_get_loaded_filename(DSO *dso)
- {
- if(dso == NULL)
- {
+const char *
+DSO_get_loaded_filename(DSO *dso)
+{
+ if (dso == NULL) {
DSOerr(DSO_F_DSO_GET_LOADED_FILENAME,
- ERR_R_PASSED_NULL_PARAMETER);
- return(NULL);
- }
- return(dso->loaded_filename);
+ ERR_R_PASSED_NULL_PARAMETER);
+ return (NULL);
}
+ return (dso->loaded_filename);
+}
-int DSO_pathbyaddr(void *addr,char *path,int sz)
- {
+int
+DSO_pathbyaddr(void *addr, char *path, int sz)
+{
DSO_METHOD *meth = default_DSO_meth;
- if (meth == NULL) meth = DSO_METHOD_openssl();
- if (meth->pathbyaddr == NULL)
- {
- DSOerr(DSO_F_DSO_PATHBYADDR,DSO_R_UNSUPPORTED);
+ if (meth == NULL)
+ meth = DSO_METHOD_openssl();
+ if (meth->pathbyaddr == NULL) {
+ DSOerr(DSO_F_DSO_PATHBYADDR, DSO_R_UNSUPPORTED);
return -1;
- }
- return (*meth->pathbyaddr)(addr,path,sz);
}
+ return (*meth->pathbyaddr)(addr, path, sz);
+}
-void *DSO_global_lookup(const char *name)
- {
+void *
+DSO_global_lookup(const char *name)
+{
DSO_METHOD *meth = default_DSO_meth;
- if (meth == NULL) meth = DSO_METHOD_openssl();
- if (meth->globallookup == NULL)
- {
- DSOerr(DSO_F_DSO_GLOBAL_LOOKUP,DSO_R_UNSUPPORTED);
+ if (meth == NULL)
+ meth = DSO_METHOD_openssl();
+ if (meth->globallookup == NULL) {
+ DSOerr(DSO_F_DSO_GLOBAL_LOOKUP, DSO_R_UNSUPPORTED);
return NULL;
- }
- return (*meth->globallookup)(name);
}
+ return (*meth->globallookup)(name);
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
NULL, /* finish */
NULL, /* pathbyaddr */
NULL /* globallookup */
- };
-
-DSO_METHOD *DSO_METHOD_null(void)
- {
- return(&dso_meth_null);
- }
+};
+DSO_METHOD *
+DSO_METHOD_null(void)
+{
+ return (&dso_meth_null);
+}
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
/* We just pinch the method from an appropriate "default" method. */
-DSO_METHOD *DSO_METHOD_openssl(void)
- {
+DSO_METHOD *
+DSO_METHOD_openssl(void)
+{
#ifdef DEF_DSO_METHOD
- return(DEF_DSO_METHOD());
+ return (DEF_DSO_METHOD());
#elif defined(DSO_DLFCN)
- return(DSO_METHOD_dlfcn());
+ return (DSO_METHOD_dlfcn());
#else
- return(DSO_METHOD_null());
+ return (DSO_METHOD_null());
#endif
- }
+}