Commit c6cb42e4 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

"Relax" prototype and rename DSO_global_lookup_func to DSO_global_lookup.

parent 2d43a894
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -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.
+3 −3
Original line number Diff line number Diff line
@@ -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;
+5 −6
Original line number Diff line number Diff line
@@ -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 */
+1 −9
Original line number Diff line number Diff line
@@ -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();
+2 −2
Original line number Diff line number Diff line
@@ -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;