/* Error handling for Windows | |
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, | |
2006 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 | |
terms of the GNU General Public License as published by the Free Software | |
Foundation; either version 2, or (at your option) any later version. | |
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY | |
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |
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 | |
GNU Make; see the file COPYING. If not, write to the Free Software | |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ | |
#include <windows.h> | |
#include "w32err.h" | |
/* | |
* Description: the windows32 version of perror() | |
* | |
* Returns: a pointer to a static error | |
* | |
* Notes/Dependencies: I got this from | |
* comp.os.ms-windows.programmer.win32 | |
*/ | |
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 | |
/* Fill message buffer with a default message in | |
* case FormatMessage fails | |
*/ | |
wsprintf (szMessageBuffer, "Error %ld\n", ercode); | |
/* | |
* Special code for winsock error handling. | |
*/ | |
if (ercode > WSABASEERR) { | |
HMODULE hModule = GetModuleHandle("wsock32"); | |
if (hModule != NULL) { | |
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, | |
hModule, | |
ercode, | |
LANG_NEUTRAL, | |
szMessageBuffer, | |
sizeof(szMessageBuffer), | |
NULL); | |
FreeLibrary(hModule); | |
} | |
} else { | |
/* | |
* Default system message handling | |
*/ | |
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, | |
NULL, | |
ercode, | |
LANG_NEUTRAL, | |
szMessageBuffer, | |
sizeof(szMessageBuffer), | |
NULL); | |
} | |
return szMessageBuffer; | |
} | |