提交 c6cb42e4 编写于 作者: A Andy Polyakov

"Relax" prototype and rename DSO_global_lookup_func to DSO_global_lookup.

上级 2d43a894
......@@ -173,9 +173,8 @@ typedef struct dso_meth_st
/* Return pathname of the module containing location */
int (*pathbyaddr)(void *addr,char *path,int sz);
/* Perform global symbol lookup, i.e. among *all* modules,
* see commentray in dso_lib.c for further details. */
DSO_FUNC_TYPE (*globallookup)(const char *symname);
/* Perform global symbol lookup, i.e. among *all* modules */
void *(*globallookup)(const char *symname);
} DSO_METHOD;
/**********************************************************************/
......@@ -313,6 +312,16 @@ DSO_METHOD *DSO_METHOD_vms(void);
*/
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 */
/* 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.
......
......@@ -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_merger(DSO *dso, const char *filespec1, const char *filespec2);
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 = {
"OpenSSL 'dl' shared library method",
......@@ -383,9 +383,9 @@ static int dl_pathbyaddr(void *addr,char *path,int sz)
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;
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,
const char *filespec2);
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 = {
"OpenSSL 'dlfcn' shared library method",
......@@ -446,17 +446,16 @@ static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
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 *handle = dlopen(NULL,RTLD_LAZY);
void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
if (handle)
{
ret.p = dlsym(handle,name);
ret = dlsym(handle,name);
dlclose(handle);
}
return ret.f;
return ret;
}
#endif /* DSO_DLFCN */
......@@ -477,15 +477,7 @@ int DSO_pathbyaddr(void *addr,char *path,int sz)
return (*meth->pathbyaddr)(addr,path,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. */
DSO_FUNC_TYPE DSO_global_lookup_func(const char *name)
void *DSO_global_lookup(const char *name)
{
DSO_METHOD *meth = default_DSO_meth;
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,
const char *filespec2);
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);
......@@ -773,7 +773,7 @@ static int win32_pathbyaddr(void *addr,char *path,int sz)
return 0;
}
static DSO_FUNC_TYPE win32_globallookup(const char *name)
static void *win32_globallookup(const char *name)
{
HMODULE dll;
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册