diff options
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 7 | ||||
-rw-r--r-- | winsup/cygwin/autoload.cc | 11 | ||||
-rw-r--r-- | winsup/cygwin/libc/minires.c | 4 |
3 files changed, 15 insertions, 7 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index ee1fc5ac3..89618cec2 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2010-09-24 Christopher Faylor <me+cygwin@cgf.cx> + + * 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. + 2010-09-24 Corinna Vinschen <corinna@vinschen.de> * fhandler.cc (fhandler_base::open): Handle query_write_dac flag. diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 99fcf790e..4d8ffd08e 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -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; } diff --git a/winsup/cygwin/libc/minires.c b/winsup/cygwin/libc/minires.c index a3d06bff4..725112761 100644 --- a/winsup/cygwin/libc/minires.c +++ b/winsup/cygwin/libc/minires.c @@ -441,8 +441,8 @@ int res_nsend( res_state statp, const unsigned char * MsgPtr, if (statp->os_query) { int len; short int Class, Type; - unsigned char DomName[MAXDNAME]; - unsigned char * ptr = MsgPtr + HFIXEDSZ; + char DomName[MAXDNAME]; + unsigned char * ptr = (unsigned char *) MsgPtr + HFIXEDSZ; len = dn_expand(MsgPtr, MsgPtr + MsgLength, ptr, DomName, sizeof(DomName)); if (len > 0) { ptr += len; |