* autoload.cc (std_dll_init): Move dll_path closer to its use. Use dll_path in
fatal error. Set ret values under lock control. * lib/minires.c (res_nsend): Fix compilation errors owing to pointer signedness.
This commit is contained in:
@ -212,7 +212,6 @@ std_dll_init ()
|
||||
struct func_info *func = (struct func_info *) __builtin_return_address (0);
|
||||
struct dll_info *dll = func->dll;
|
||||
retchain ret;
|
||||
WCHAR dll_path[MAX_PATH];
|
||||
|
||||
if (InterlockedIncrement (&dll->here))
|
||||
do
|
||||
@ -225,6 +224,7 @@ std_dll_init ()
|
||||
{
|
||||
fenv_t fpuenv;
|
||||
fegetenv (&fpuenv);
|
||||
WCHAR dll_path[MAX_PATH];
|
||||
/* http://www.microsoft.com/technet/security/advisory/2269637.mspx */
|
||||
wcpcpy (wcpcpy (dll_path, windows_system_directory), dll->name);
|
||||
if ((h = LoadLibraryW (dll_path)) != NULL)
|
||||
@ -233,11 +233,15 @@ std_dll_init ()
|
||||
dll->handle = h;
|
||||
}
|
||||
else if (!(func->decoration & 1))
|
||||
api_fatal ("could not load %W, %E", dll->name);
|
||||
api_fatal ("could not load %W, %E", dll_path);
|
||||
else
|
||||
dll->handle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
/* Set "arguments for dll_chain. */
|
||||
ret.low = (long) dll->init;
|
||||
ret.high = (long) func;
|
||||
|
||||
InterlockedDecrement (&dll->here);
|
||||
|
||||
/* Kludge alert. Redirects the return address to dll_chain. */
|
||||
@ -245,9 +249,6 @@ std_dll_init ()
|
||||
movl $dll_chain,4(%ebp) \n\
|
||||
");
|
||||
|
||||
/* Set "arguments for dll_chain. */
|
||||
ret.low = (long) dll->init;
|
||||
ret.high = (long) func;
|
||||
return ret.ll;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user