From 044ab77dcc59ec7eea0e3880d47c22f5f62cc502 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 20 Feb 2018 17:59:45 +0100 Subject: [PATCH] Cygwin: clean error mapping - Move definition of windows to POSIX error mapping struct into cygerrno.h - Move declaration of winsock errno functions to cygerrno.h - Input to error mapping functions is DWORD Signed-off-by: Corinna Vinschen --- winsup/cygwin/cygerrno.h | 10 ++++++++++ winsup/cygwin/errno.cc | 7 +------ winsup/cygwin/net.cc | 21 +++++++-------------- winsup/cygwin/winsup.h | 3 --- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/winsup/cygwin/cygerrno.h b/winsup/cygwin/cygerrno.h index ce33d971a..afcae4cb0 100644 --- a/winsup/cygwin/cygerrno.h +++ b/winsup/cygwin/cygerrno.h @@ -11,6 +11,13 @@ details. */ #include #include "regparm.h" +struct errmap_t +{ + DWORD w; /* windows version of error */ + const char *s; /* text of windows version */ + int e; /* errno version of error */ +}; + void __reg3 seterrno_from_win_error (const char *file, int line, DWORD code); void __reg3 seterrno_from_nt_status (const char *file, int line, NTSTATUS status); int __reg2 geterrno_from_win_error (DWORD code = GetLastError (), int deferrno = 13 /*EACCESS*/); @@ -34,6 +41,9 @@ __set_errno (const char *fn, int ln, int val) } #define set_errno(val) __set_errno (__PRETTY_FUNCTION__, __LINE__, (val)) +void __reg2 __set_winsock_errno (const char *fn, int ln); +#define set_winsock_errno() __set_winsock_errno (__FUNCTION__, __LINE__) + #define get_errno() (errno) extern "C" void __stdcall set_sig_errno (int e); diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc index 9168e9b4d..420326566 100644 --- a/winsup/cygwin/errno.cc +++ b/winsup/cygwin/errno.cc @@ -31,12 +31,7 @@ details. */ #define X(w, e) {ERROR_##w, #w, e} -static const struct -{ - DWORD w; /* windows version of error */ - const char *s; /* text of windows version */ - int e; /* errno version of error */ -} errmap[] = +static const errmap_t errmap[] = { /* FIXME: Some of these choices are arbitrary! */ X (ACCESS_DENIED, EACCES), diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index d0e4d3b57..7d73790a6 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -150,14 +150,7 @@ inet_makeaddr (int net, int lna) return in; } -struct tl -{ - int w; - const char *s; - int e; -}; - -static const struct tl errmap[] = { +static const errmap_t wsock_errmap[] = { {WSA_INVALID_HANDLE, "WSA_INVALID_HANDLE", EBADF}, {WSA_NOT_ENOUGH_MEMORY, "WSA_NOT_ENOUGH_MEMORY", ENOMEM}, {WSA_INVALID_PARAMETER, "WSA_INVALID_PARAMETER", EINVAL}, @@ -206,11 +199,11 @@ static const struct tl errmap[] = { }; static int -find_winsock_errno (int why) +find_winsock_errno (DWORD why) { - for (int i = 0; errmap[i].s != NULL; ++i) - if (why == errmap[i].w) - return errmap[i].e; + for (int i = 0; wsock_errmap[i].s != NULL; ++i) + if (why == wsock_errmap[i].w) + return wsock_errmap[i].e; return EPERM; } @@ -229,7 +222,7 @@ __set_winsock_errno (const char *fn, int ln) * Since the member `s' isn't used for debug output we can use it * for the error text returned by herror and hstrerror. */ -static const struct tl host_errmap[] = { +static const errmap_t host_errmap[] = { {WSAHOST_NOT_FOUND, "Unknown host", HOST_NOT_FOUND}, {WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN}, {WSANO_RECOVERY, "Unknown server error", NO_RECOVERY}, @@ -242,7 +235,7 @@ set_host_errno () { int i; - int why = WSAGetLastError (); + DWORD why = WSAGetLastError (); for (i = 0; host_errmap[i].w != 0; ++i) if (why == host_errmap[i].w) diff --git a/winsup/cygwin/winsup.h b/winsup/cygwin/winsup.h index 1b3fbfeee..d2b37181a 100644 --- a/winsup/cygwin/winsup.h +++ b/winsup/cygwin/winsup.h @@ -212,9 +212,6 @@ bool timeval_to_ms (const struct timeval *, DWORD &); void __stdcall set_console_title (char *); void init_console_handler (bool); -void __reg2 __set_winsock_errno (const char *fn, int ln); -#define set_winsock_errno() __set_winsock_errno (__FUNCTION__, __LINE__) - extern bool wsock_started; /* Printf type functions */