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); s = strerror(errid);
#endif #endif
} else if (kind == RKTIO_ERROR_KIND_GAI) } 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 #ifdef RKTIO_SYSTEM_WINDOWS
else if (kind == RKTIO_ERROR_KIND_WINDOWS) { else if (kind == RKTIO_ERROR_KIND_WINDOWS) {
wchar_t mbuf[256]; wchar_t mbuf[256];

View File

@ -210,9 +210,7 @@ struct rktio_addrinfo_t {
# define rktio_AI_PASSIVE AI_PASSIVE # 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_getaddrinfo(n, s, h, res) getaddrinfo(n, s, RKTIO_AS_ADDRINFO(h), RKTIO_AS_ADDRINFO_PTR(res))
# define do_freeaddrinfo freeaddrinfo # define do_freeaddrinfo freeaddrinfo
# ifdef RKTIO_SYSTEM_WINDOWS # ifndef RKTIO_SYSTEM_WINDOWS
# define do_gai_strerror gai_strerrorA
# else
# define do_gai_strerror gai_strerror # define do_gai_strerror gai_strerror
# endif # endif
#else #else
@ -749,9 +747,18 @@ void rktio_addrinfo_free(rktio_t *rktio, rktio_addrinfo_t *a)
do_freeaddrinfo(RKTIO_AS_ADDRINFO(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); 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); 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 */ /* Processes */