"Relax" prototype and rename DSO_global_lookup_func to DSO_global_lookup.
This commit is contained in:
parent
2d43a89488
commit
c6cb42e4fb
@ -173,9 +173,8 @@ typedef struct dso_meth_st
|
|||||||
|
|
||||||
/* Return pathname of the module containing location */
|
/* 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,
|
/* Perform global symbol lookup, i.e. among *all* modules */
|
||||||
* see commentray in dso_lib.c for further details. */
|
void *(*globallookup)(const char *symname);
|
||||||
DSO_FUNC_TYPE (*globallookup)(const char *symname);
|
|
||||||
} DSO_METHOD;
|
} DSO_METHOD;
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
@ -313,6 +312,16 @@ DSO_METHOD *DSO_METHOD_vms(void);
|
|||||||
*/
|
*/
|
||||||
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
|
||||||
|
* attempt to dereference the pointer is doomed to have fatal
|
||||||
|
* consequences. Primary usage for this function is to probe *core*
|
||||||
|
* system functionality, e.g. check if getnameinfo(3) is available
|
||||||
|
* at run-time without bothering about OS-specific details such as
|
||||||
|
* libc.so.versioning or where does it actually reside: in libc
|
||||||
|
* itself or libsocket. */
|
||||||
|
void *DSO_global_lookup(const char *name);
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
/* BEGIN ERROR CODES */
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||||
* made after this point may be overwritten when the script is next run.
|
* made after this point may be overwritten when the script is next run.
|
||||||
|
@ -86,7 +86,7 @@ static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg);
|
|||||||
static char *dl_name_converter(DSO *dso, const char *filename);
|
static char *dl_name_converter(DSO *dso, const char *filename);
|
||||||
static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2);
|
static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2);
|
||||||
static int dl_pathbyaddr(void *addr,char *path,int sz);
|
static int dl_pathbyaddr(void *addr,char *path,int sz);
|
||||||
static DSO_FUNC_TYPE dl_globallookup(const char *name);
|
static void *dl_globallookup(const char *name);
|
||||||
|
|
||||||
static DSO_METHOD dso_meth_dl = {
|
static DSO_METHOD dso_meth_dl = {
|
||||||
"OpenSSL 'dl' shared library method",
|
"OpenSSL 'dl' shared library method",
|
||||||
@ -383,9 +383,9 @@ static int dl_pathbyaddr(void *addr,char *path,int sz)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DSO_FUNC_TYPE dl_globallookup(const char *name)
|
static void *dl_globallookup(const char *name)
|
||||||
{
|
{
|
||||||
DSO_FUNC_TYPE ret;
|
void *ret;
|
||||||
shl_t h = NULL;
|
shl_t h = NULL;
|
||||||
|
|
||||||
return shl_findsym(&h,name,TYPE_UNDEFINED,&ret) ? NULL : ret;
|
return shl_findsym(&h,name,TYPE_UNDEFINED,&ret) ? NULL : ret;
|
||||||
|
@ -99,7 +99,7 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename);
|
|||||||
static char *dlfcn_merger(DSO *dso, const char *filespec1,
|
static char *dlfcn_merger(DSO *dso, const char *filespec1,
|
||||||
const char *filespec2);
|
const char *filespec2);
|
||||||
static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
|
static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
|
||||||
static DSO_FUNC_TYPE dlfcn_globallookup(const char *name);
|
static void *dlfcn_globallookup(const char *name);
|
||||||
|
|
||||||
static DSO_METHOD dso_meth_dlfcn = {
|
static DSO_METHOD dso_meth_dlfcn = {
|
||||||
"OpenSSL 'dlfcn' shared library method",
|
"OpenSSL 'dlfcn' shared library method",
|
||||||
@ -446,17 +446,16 @@ static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DSO_FUNC_TYPE dlfcn_globallookup(const char *name)
|
static void *dlfcn_globallookup(const char *name)
|
||||||
{
|
{
|
||||||
union { void *p; DSO_FUNC_TYPE f; } ret = { NULL };
|
void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
|
||||||
void *handle = dlopen(NULL,RTLD_LAZY);
|
|
||||||
|
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
ret.p = dlsym(handle,name);
|
ret = dlsym(handle,name);
|
||||||
dlclose(handle);
|
dlclose(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret.f;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* DSO_DLFCN */
|
#endif /* DSO_DLFCN */
|
||||||
|
@ -477,15 +477,7 @@ int DSO_pathbyaddr(void *addr,char *path,int sz)
|
|||||||
return (*meth->pathbyaddr)(addr,path,sz);
|
return (*meth->pathbyaddr)(addr,path,sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function should be used with caution! It looks up symbols in
|
void *DSO_global_lookup(const char *name)
|
||||||
* *all* loaded modules and if module gets unloaded by somebody else
|
|
||||||
* attempt to dereference the pointer is doomed to have fatal
|
|
||||||
* consequences. Primary usage for this function is to probe *core*
|
|
||||||
* system functionality, e.g. check if getnameinfo(3) is available
|
|
||||||
* at run-time without bothering about OS-specific details such as
|
|
||||||
* libc.so.versioning or where does it actually reside: in libc
|
|
||||||
* itself or libsocket. */
|
|
||||||
DSO_FUNC_TYPE DSO_global_lookup_func(const char *name)
|
|
||||||
{
|
{
|
||||||
DSO_METHOD *meth = default_DSO_meth;
|
DSO_METHOD *meth = default_DSO_meth;
|
||||||
if (meth == NULL) meth = DSO_METHOD_openssl();
|
if (meth == NULL) meth = DSO_METHOD_openssl();
|
||||||
|
@ -129,7 +129,7 @@ static char *win32_name_converter(DSO *dso, const char *filename);
|
|||||||
static char *win32_merger(DSO *dso, const char *filespec1,
|
static char *win32_merger(DSO *dso, const char *filespec1,
|
||||||
const char *filespec2);
|
const char *filespec2);
|
||||||
static int win32_pathbyaddr(void *addr,char *path,int sz);
|
static int win32_pathbyaddr(void *addr,char *path,int sz);
|
||||||
static DSO_FUNC_TYPE win32_globallookup(const char *name);
|
static void *win32_globallookup(const char *name);
|
||||||
|
|
||||||
static const char *openssl_strnchr(const char *string, int c, size_t len);
|
static const char *openssl_strnchr(const char *string, int c, size_t len);
|
||||||
|
|
||||||
@ -773,7 +773,7 @@ static int win32_pathbyaddr(void *addr,char *path,int sz)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DSO_FUNC_TYPE win32_globallookup(const char *name)
|
static void *win32_globallookup(const char *name)
|
||||||
{
|
{
|
||||||
HMODULE dll;
|
HMODULE dll;
|
||||||
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
|
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user