add (errnum) in front of windows error messages

On localized, non-English versions of windows, it is
common to have two active charsets -- for console applications
and for GUI applications, together with localized error messages
returned by windows.  But two charsets are rarely compatible,
so sending the same byte sequence to console and to windows
event log makes one or another to be unreadable.  So at least
include the error number, this way it will be possible to
lookup the actual error test using external ways.

Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
Michael Tokarev 2012-05-04 16:41:47 +04:00 committed by Guus Sliepen
parent 5c0dd104f9
commit 42a8158b1d

View file

@ -53,15 +53,17 @@ void bin2hex(char *src, char *dst, int length) {
#endif #endif
const char *winerror(int err) { const char *winerror(int err) {
static char buf[1024], *newline; static char buf[1024], *ptr;
ptr = buf + sprintf(buf, "(%d) ", err);
if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, sizeof(buf), NULL)) { NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), ptr, sizeof(buf) - (ptr - buf), NULL)) {
strncpy(buf, "(unable to format errormessage)", sizeof(buf)); strcpy(ptr, "(unable to format errormessage)");
}; };
if((newline = strchr(buf, '\r'))) if((ptr = strchr(buf, '\r')))
*newline = '\0'; *ptr = '\0';
return buf; return buf;
} }