1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00

winnet.c: remove duplicated errstring system.

There's one of these centralised in win_strerror() in winmisc.c, and
it doesn't seem worth keeping an earlier iteration of the same idea
entirely separate in winsock_error_string.

This removal means that non-network-specific error codes received in a
network context will no longer have "Network error:" prefixed to them.
But I think that's OK, because it seems unlikely to be critically
important that such an error was received from a network function - if
anything like that comes up then it's probably some kind of systemwide
chaos.
This commit is contained in:
Simon Tatham 2018-11-03 08:32:25 +00:00
parent 650bfbb084
commit 9248f5c994

View File

@ -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,