* dlfcn.cc (get_full_path_of_dll): Just return a bool value. Drop
local path_conv in favor of getting it as parameter. Add local string buffer instead of getting it as parameter. (dlopen): Accommodate get_full_path_of_dll change. Fetch WCHAR Windows path from path_conv variable and call LoadLibraryW.
This commit is contained in:
parent
cc0748930b
commit
54155bc37b
|
@ -1,3 +1,11 @@
|
||||||
|
2009-04-16 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* dlfcn.cc (get_full_path_of_dll): Just return a bool value. Drop
|
||||||
|
local path_conv in favor of getting it as parameter. Add local string
|
||||||
|
buffer instead of getting it as parameter.
|
||||||
|
(dlopen): Accommodate get_full_path_of_dll change. Fetch WCHAR Windows
|
||||||
|
path from path_conv variable and call LoadLibraryW.
|
||||||
|
|
||||||
2009-04-16 Corinna Vinschen <corinna@vinschen.de>
|
2009-04-16 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* ntdll.h (STATUS_LOCK_NOT_GRANTED): Define.
|
* ntdll.h (STATUS_LOCK_NOT_GRANTED): Define.
|
||||||
|
|
|
@ -36,16 +36,20 @@ check_path_access (const char *mywinenv, const char *name, path_conv& buf)
|
||||||
|
|
||||||
/* Search LD_LIBRARY_PATH for dll, if it exists.
|
/* Search LD_LIBRARY_PATH for dll, if it exists.
|
||||||
Return Windows version of given path. */
|
Return Windows version of given path. */
|
||||||
static const char * __stdcall
|
static bool __stdcall
|
||||||
get_full_path_of_dll (const char* str, char *name)
|
get_full_path_of_dll (const char* str, path_conv &real_filename)
|
||||||
{
|
{
|
||||||
int len = strlen (str);
|
int len = strlen (str);
|
||||||
|
|
||||||
/* empty string or too long to be legal win32 pathname? */
|
/* empty string? */
|
||||||
if (len == 0 || len >= PATH_MAX)
|
if (len == 0)
|
||||||
return str; /* Yes. Let caller deal with it. */
|
{
|
||||||
|
set_errno (EINVAL);
|
||||||
|
return false; /* Yes. Let caller deal with it. */
|
||||||
|
}
|
||||||
|
|
||||||
const char *ret;
|
tmp_pathbuf tp;
|
||||||
|
char *name = tp.c_get ();
|
||||||
|
|
||||||
strcpy (name, str); /* Put it somewhere where we can manipulate it. */
|
strcpy (name, str); /* Put it somewhere where we can manipulate it. */
|
||||||
|
|
||||||
|
@ -58,22 +62,16 @@ get_full_path_of_dll (const char* str, char *name)
|
||||||
strcat (name, ".dll");
|
strcat (name, ".dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
path_conv real_filename;
|
|
||||||
|
|
||||||
if (isabspath (name) ||
|
if (isabspath (name) ||
|
||||||
(ret = check_path_access ("LD_LIBRARY_PATH=", name, real_filename)
|
(check_path_access ("LD_LIBRARY_PATH=", name, real_filename)
|
||||||
?: check_path_access ("/usr/lib", name, real_filename)) == NULL)
|
?: check_path_access ("/usr/lib", name, real_filename)) == NULL)
|
||||||
real_filename.check (name, PC_SYM_FOLLOW | PC_NOFULL | PC_NULLEMPTY); /* Convert */
|
real_filename.check (name, PC_SYM_FOLLOW | PC_NOFULL | PC_NULLEMPTY);
|
||||||
|
|
||||||
if (!real_filename.error)
|
if (!real_filename.error)
|
||||||
ret = strcpy (name, real_filename.get_win32 ());
|
return true;
|
||||||
else
|
|
||||||
{
|
|
||||||
set_errno (real_filename.error);
|
|
||||||
ret = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
set_errno (real_filename.error);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
|
@ -85,15 +83,17 @@ dlopen (const char *name, int)
|
||||||
ret = (void *) GetModuleHandle (NULL); /* handle for the current module */
|
ret = (void *) GetModuleHandle (NULL); /* handle for the current module */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tmp_pathbuf tp;
|
|
||||||
char *buf = tp.c_get ();
|
|
||||||
/* handle for the named library */
|
/* handle for the named library */
|
||||||
const char *fullpath = get_full_path_of_dll (name, buf);
|
path_conv pc;
|
||||||
if (!fullpath)
|
if (!get_full_path_of_dll (name, pc))
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = (void *) LoadLibrary (fullpath);
|
tmp_pathbuf tp;
|
||||||
|
wchar_t *path = tp.w_get ();
|
||||||
|
|
||||||
|
pc.get_wide_win32_path (path);
|
||||||
|
ret = (void *) LoadLibraryW (path);
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue