projects
/
freeradius.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New build path variable
[freeradius.git]
/
libltdl
/
ltdl.c
diff --git
a/libltdl/ltdl.c
b/libltdl/ltdl.c
index
b2bc220
..
7972d53
100644
(file)
--- a/
libltdl/ltdl.c
+++ b/
libltdl/ltdl.c
@@
-2183,7
+2183,8
@@
static int trim LT_PARAMS((char **dest,
static int try_dlopen LT_PARAMS((lt_dlhandle *handle,
const char *filename));
static int tryall_dlopen LT_PARAMS((lt_dlhandle *handle,
static int try_dlopen LT_PARAMS((lt_dlhandle *handle,
const char *filename));
static int tryall_dlopen LT_PARAMS((lt_dlhandle *handle,
- const char *filename));
+ const char *filename,
+ const char * useloader));
static int unload_deplibs LT_PARAMS((lt_dlhandle handle));
static int lt_argz_insert LT_PARAMS((char **pargz,
size_t *pargz_len,
static int unload_deplibs LT_PARAMS((lt_dlhandle handle));
static int lt_argz_insert LT_PARAMS((char **pargz,
size_t *pargz_len,
@@
-2371,9
+2372,10
@@
lt_dlexit ()
}
static int
}
static int
-tryall_dlopen (handle, filename)
+tryall_dlopen (handle, filename
, useloader
)
lt_dlhandle *handle;
const char *filename;
lt_dlhandle *handle;
const char *filename;
+ const char *useloader;
{
lt_dlhandle cur;
lt_dlloader *loader;
{
lt_dlhandle cur;
lt_dlloader *loader;
@@
-2440,6
+2442,11
@@
tryall_dlopen (handle, filename)
while (loader)
{
while (loader)
{
+ if (useloader && strcmp(loader->loader_name, useloader))
+ {
+ loader = loader->next;
+ continue;
+ }
lt_user_data data = loader->dlloader_data;
cur->module = loader->module_open (data, filename);
lt_user_data data = loader->dlloader_data;
cur->module = loader->module_open (data, filename);
@@
-2509,7
+2516,7
@@
tryall_dlopen_module (handle, prefix, dirname, dlname)
error += tryall_dlopen_module (handle,
(const char *) 0, prefix, filename);
}
error += tryall_dlopen_module (handle,
(const char *) 0, prefix, filename);
}
- else if (tryall_dlopen (handle, filename) != 0)
+ else if (tryall_dlopen (handle, filename
, NULL
) != 0)
{
++error;
}
{
++error;
}
@@
-2530,7
+2537,7
@@
find_module (handle, dir, libdir, dlname, old_name, installed)
/* Try to open the old library first; if it was dlpreopened,
we want the preopened version of it, even if a dlopenable
module is available. */
/* Try to open the old library first; if it was dlpreopened,
we want the preopened version of it, even if a dlopenable
module is available. */
- if (old_name && tryall_dlopen (handle, old_name) == 0)
+ if (old_name && tryall_dlopen (handle, old_name
, "dlpreload"
) == 0)
{
return 0;
}
{
return 0;
}
@@
-2794,7
+2801,7
@@
find_handle_callback (filename, data, ignored)
/* Try to dlopen the file, but do not continue searching in any
case. */
/* Try to dlopen the file, but do not continue searching in any
case. */
- if (tryall_dlopen (handle, filename) != 0)
+ if (tryall_dlopen (handle, filename
,NULL
) != 0)
*handle = 0;
return 1;
*handle = 0;
return 1;
@@
-3064,7
+3071,6
@@
try_dlopen (phandle, filename)
char * name = 0;
int errors = 0;
lt_dlhandle newhandle;
char * name = 0;
int errors = 0;
lt_dlhandle newhandle;
- int free_base_name = 0;
assert (phandle);
assert (*phandle == 0);
assert (phandle);
assert (*phandle == 0);
@@
-3084,7
+3090,7
@@
try_dlopen (phandle, filename)
/* lt_dlclose()ing yourself is very bad! Disallow it. */
LT_DLSET_FLAG (*phandle, LT_DLRESIDENT_FLAG);
/* lt_dlclose()ing yourself is very bad! Disallow it. */
LT_DLSET_FLAG (*phandle, LT_DLRESIDENT_FLAG);
- if (tryall_dlopen (&newhandle, 0) != 0)
+ if (tryall_dlopen (&newhandle, 0
, NULL
) != 0)
{
LT_DLFREE (*phandle);
return 1;
{
LT_DLFREE (*phandle);
return 1;
@@
-3122,10
+3128,8
@@
try_dlopen (phandle, filename)
++base_name;
}
++base_name;
}
- else
{
+ else
base_name = canonical;
base_name = canonical;
- free_base_name = 1;
- }
assert (base_name && *base_name);
assert (base_name && *base_name);
@@
-3208,7
+3212,7
@@
try_dlopen (phandle, filename)
}
#endif
}
}
#endif
}
- if (!file)
+ else
{
file = fopen (filename, LT_READTEXT_MODE);
}
{
file = fopen (filename, LT_READTEXT_MODE);
}
@@
-3392,7
+3396,7
@@
try_dlopen (phandle, filename)
#endif
)))
{
#endif
)))
{
- if (tryall_dlopen (&newhandle, filename) != 0)
+ if (tryall_dlopen (&newhandle, filename
, NULL
) != 0)
{
newhandle = NULL;
}
{
newhandle = NULL;
}
@@
-3426,7
+3430,6
@@
try_dlopen (phandle, filename)
LT_DLFREE (dir);
LT_DLFREE (name);
LT_DLFREE (canonical);
LT_DLFREE (dir);
LT_DLFREE (name);
LT_DLFREE (canonical);
- if (free_base_name) LT_DLFREE (base_name);
return errors;
}
return errors;
}
@@
-3506,6
+3509,10
@@
lt_dlopenext (filename)
LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FR_DEPLIB));
return 0; /* leaks tmp and handle */
}
LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FR_DEPLIB));
return 0; /* leaks tmp and handle */
}
+ if (handle && errors) {
+ LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FR_DEPLIB));
+ return 0; /* leaks tmp and handle */
+ }
/* If we found FILENAME, stop searching -- whether we were able to
load the file as a module or not. If the file exists but loading
/* If we found FILENAME, stop searching -- whether we were able to
load the file as a module or not. If the file exists but loading
@@
-3532,6
+3539,10
@@
lt_dlopenext (filename)
else
{
tmp[len] = LT_EOS_CHAR;
else
{
tmp[len] = LT_EOS_CHAR;
+ if (handle && errors) {
+ LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FR_DEPLIB));
+ return 0; /* leaks tmp and handle */
+ }
}
strcat(tmp, shlib_ext);
}
strcat(tmp, shlib_ext);