#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 */ | |
__declspec (thread) static char szMessageBuffer[128]; | |
/* Fill message buffer with a default message in | |
* case FormatMessage fails | |
*/ | |
wsprintf (szMessageBuffer, "Error %ld", 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; | |
} | |