Commit e666c459 authored by Richard Levitte's avatar Richard Levitte
Browse files

Add the possibility to have symbols loaded globally with DSO.

parent 98cec7fc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@

 Changes between 0.9.7c and 0.9.8  [xx XXX xxxx]

  *) Add the possibility to load symbols globally with DSO.
     [Götz Babin-Ebell <babin-ebell@trustcenter.de> via Richard Levitte]

  *) Add the functions ERR_set_mark() and ERR_pop_to_mark() for better
     control of the error stack.
     [Richard Levitte]
+7 −0
Original line number Diff line number Diff line
@@ -95,6 +95,13 @@ extern "C" {
 */
#define DSO_FLAG_UPCASE_SYMBOL			0x10

/* This flag loads the library with public symbols.
 * Meaning: The exported symbols of this library are public
 * to all libraries loaded after this library.
 * At the moment only implemented in unix.
 */
#define DSO_FLAG_GLOBAL_SYMBOLS			0x20


typedef void (*DSO_FUNC_TYPE)(void);

+7 −1
Original line number Diff line number Diff line
@@ -140,13 +140,19 @@ 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 = DLOPEN_FLAG;

	if(filename == NULL)
		{
		DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
		goto err;
		}
	ptr = dlopen(filename, DLOPEN_FLAG);

#ifdef RTLD_GLOBAL
	if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
		flags |= RTLD_GLOBAL;
#endif
	ptr = dlopen(filename, flags);
	if(ptr == NULL)
		{
		DSOerr(DSO_F_DLFCN_LOAD,DSO_R_LOAD_FAILED);