rktio: fix Windows network error reporting

Convert wide-character error message to UTF-8.

Closes #2794
This commit is contained in:
Matthew Flatt 2019-08-22 17:05:35 -06:00
parent d14a4f75a1
commit 2a5df8ad2a
3 changed files with 13 additions and 6 deletions

View File

@ -141,7 +141,7 @@ const char *rktio_get_error_string(rktio_t *rktio, int kind, int errid)
s = strerror(errid);
#endif
} else if (kind == RKTIO_ERROR_KIND_GAI)
s = rktio_gai_strerror(errid);
s = rktio_gai_strerror(rktio, errid); /* may use `last_err_str` */
#ifdef RKTIO_SYSTEM_WINDOWS
else if (kind == RKTIO_ERROR_KIND_WINDOWS) {
wchar_t mbuf[256];

View File

@ -210,9 +210,7 @@ struct rktio_addrinfo_t {
# define rktio_AI_PASSIVE AI_PASSIVE
# define do_getaddrinfo(n, s, h, res) getaddrinfo(n, s, RKTIO_AS_ADDRINFO(h), RKTIO_AS_ADDRINFO_PTR(res))
# define do_freeaddrinfo freeaddrinfo
# ifdef RKTIO_SYSTEM_WINDOWS
# define do_gai_strerror gai_strerrorA
# else
# ifndef RKTIO_SYSTEM_WINDOWS
# define do_gai_strerror gai_strerror
# endif
#else
@ -749,9 +747,18 @@ void rktio_addrinfo_free(rktio_t *rktio, rktio_addrinfo_t *a)
do_freeaddrinfo(RKTIO_AS_ADDRINFO(a));
}
const char *rktio_gai_strerror(int errnum)
const char *rktio_gai_strerror(rktio_t *rktio, int errnum)
{
#ifdef RKTIO_SYSTEM_WINDOWS
char *s;
s = NARROW_PATH_copy(gai_strerrorW(errnum));
if (rktio->last_err_str)
free(rktio->last_err_str);
rktio->last_err_str = s;
return s;
#else
return do_gai_strerror(errnum);
#endif
}
/*========================================================================*/

View File

@ -233,7 +233,7 @@ intptr_t rktio_socket_read(rktio_t *rktio, rktio_fd_t *rfd, char *buffer, intptr
void rktio_free_ghbn(rktio_t *rktio);
const char *rktio_gai_strerror(int errnum);
const char *rktio_gai_strerror(rktio_t *rktio, int errnum);
/*========================================================================*/
/* Processes */