mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 14:39:24 -05: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:
parent
650bfbb084
commit
9248f5c994
@ -351,34 +351,8 @@ void sk_cleanup(void)
|
|||||||
#endif
|
#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 *winsock_error_string(int error)
|
||||||
{
|
{
|
||||||
const char prefix[] = "Network error: ";
|
|
||||||
struct errstring *es;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Error codes we know about and have historically had reasonably
|
* Error codes we know about and have historically had reasonably
|
||||||
* sensible error messages for.
|
* sensible error messages for.
|
||||||
@ -458,50 +432,9 @@ const char *winsock_error_string(int error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic code to handle any other error.
|
* Handle any other error code by delegating to win_strerror.
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
*/
|
||||||
|
return win_strerror(error);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SockAddr *sk_namelookup(const char *host, char **canonicalname,
|
SockAddr *sk_namelookup(const char *host, char **canonicalname,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user