diff --git a/windows/winnet.c b/windows/winnet.c index 2e6b0f03..f26343be 100644 --- a/windows/winnet.c +++ b/windows/winnet.c @@ -351,34 +351,8 @@ void sk_cleanup(void) #endif } -struct errstring { - int error; - char *text; -}; - -static int errstring_find(void *av, void *bv) -{ - int *a = (int *)av; - struct errstring *b = (struct errstring *)bv; - if (*a < b->error) - return -1; - if (*a > b->error) - return +1; - return 0; -} -static int errstring_compare(void *av, void *bv) -{ - struct errstring *a = (struct errstring *)av; - return errstring_find(&a->error, bv); -} - -static tree234 *errstrings = NULL; - const char *winsock_error_string(int error) { - const char prefix[] = "Network error: "; - struct errstring *es; - /* * Error codes we know about and have historically had reasonably * sensible error messages for. @@ -458,50 +432,9 @@ const char *winsock_error_string(int error) } /* - * Generic code to handle any other error. - * - * Slightly nasty hack here: we want to return a static string - * which the caller will never have to worry about freeing, but on - * the other hand if we call FormatMessage to get it then it will - * want to either allocate a buffer or write into one we own. - * - * So what we do is to maintain a tree234 of error strings we've - * already used. New ones are allocated from the heap, but then - * put in this tree and kept forever. + * Handle any other error code by delegating to win_strerror. */ - - if (!errstrings) - errstrings = newtree234(errstring_compare); - - es = find234(errstrings, &error, errstring_find); - - if (!es) { - int bufsize, bufused; - - es = snew(struct errstring); - es->error = error; - /* maximum size for FormatMessage is 64K */ - bufsize = 65535 + sizeof(prefix); - es->text = snewn(bufsize, char); - strcpy(es->text, prefix); - bufused = strlen(es->text); - if (!FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS), NULL, error, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - es->text + bufused, bufsize - bufused, NULL)) { - sprintf(es->text + bufused, - "Windows error code %d (and FormatMessage returned %u)", - error, (unsigned int)GetLastError()); - } else { - int len = strlen(es->text); - if (len > 0 && es->text[len-1] == '\n') - es->text[len-1] = '\0'; - } - es->text = sresize(es->text, strlen(es->text) + 1, char); - add234(errstrings, es); - } - - return es->text; + return win_strerror(error); } SockAddr *sk_namelookup(const char *host, char **canonicalname,