From d1e4f9c8fb826bb1761ae6dbbdfb566ebbe3ab61 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Fri, 22 Nov 2013 19:41:43 +0000 Subject: [PATCH] Include the numeric error code in win_strerror's output. This will be useful if someone gets a mysterious Windows error on a system configured into a language we don't speak - if they cut and paste the error message to send to us, then we won't have to try to translate it. [originally from svn r10092] --- windows/winmisc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/windows/winmisc.c b/windows/winmisc.c index c719c726..7823b43e 100644 --- a/windows/winmisc.c +++ b/windows/winmisc.c @@ -211,25 +211,23 @@ const char *win_strerror(int error) if (!es) { int bufsize; + char msgtext[65536]; /* maximum size for FormatMessage is 64K */ es = snew(struct errstring); es->error = error; - /* maximum size for FormatMessage is 64K */ - bufsize = 65535; - es->text = snewn(bufsize, char); if (!FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS), NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - es->text, bufsize, NULL)) { - sprintf(es->text, - "Windows error code %d (and FormatMessage returned %d)", + msgtext, lenof(msgtext)-1, NULL)) { + sprintf(msgtext, + "(unable to format: FormatMessage returned %d)", error, GetLastError()); } else { - int len = strlen(es->text); - if (len > 0 && es->text[len-1] == '\n') - es->text[len-1] = '\0'; + int len = strlen(msgtext); + if (len > 0 && msgtext[len-1] == '\n') + msgtext[len-1] = '\0'; } - es->text = sresize(es->text, strlen(es->text) + 1, char); + es->text = dupprintf("Error %d: %s", error, msgtext); add234(errstrings, es); } -- 2.45.2