diff options
Diffstat (limited to 'w32/subproc/w32err.c')
-rw-r--r-- | w32/subproc/w32err.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/w32/subproc/w32err.c b/w32/subproc/w32err.c index 80d796e..facfabc 100644 --- a/w32/subproc/w32err.c +++ b/w32/subproc/w32err.c @@ -1,6 +1,5 @@ /* Error handling for Windows -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +Copyright (C) 1996-2013 Free Software Foundation, Inc. This file is part of GNU Make. GNU Make is free software; you can redistribute it and/or modify it under the @@ -15,7 +14,9 @@ A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdlib.h> #include <windows.h> +#include "makeint.h" #include "w32err.h" /* @@ -26,14 +27,24 @@ this program. If not, see <http://www.gnu.org/licenses/>. */ * Notes/Dependencies: I got this from * comp.os.ms-windows.programmer.win32 */ -char * +const char * map_windows32_error_to_string (DWORD ercode) { -/* __declspec (thread) necessary if you will use multiple threads on MSVC */ -#ifdef _MSC_VER -__declspec (thread) static char szMessageBuffer[128]; -#else -static char szMessageBuffer[128]; -#endif +/* + * We used to have an MSVC-specific '__declspec (thread)' qualifier + * here, with the following comment: + * + * __declspec (thread) necessary if you will use multiple threads on MSVC + * + * However, Make was never multithreaded on Windows (except when + * Ctrl-C is hit, in which case the main thread is stopped + * immediately, so it doesn't matter in this context). The functions + * on sub_proc.c that started and stopped additional threads were + * never used, and are now #ifdef'ed away. Until we need more than + * one thread, we have no problems with the following buffer being + * static. (If and when we do need it to be in thread-local storage, + * the corresponding GCC qualifier is '__thread'.) + */ + static char szMessageBuffer[128]; /* Fill message buffer with a default message in * case FormatMessage fails */ @@ -43,6 +54,7 @@ static char szMessageBuffer[128]; * Special code for winsock error handling. */ if (ercode > WSABASEERR) { +#if 0 HMODULE hModule = GetModuleHandle("wsock32"); if (hModule != NULL) { FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, @@ -54,6 +66,9 @@ static char szMessageBuffer[128]; NULL); FreeLibrary(hModule); } +#else + fatal(NILF, szMessageBuffer); +#endif } else { /* * Default system message handling |