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 <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2018-02-20 17:59:45 +01:00
parent 0a3f4e6087
commit 044ab77dcc
4 changed files with 18 additions and 23 deletions

View File

@ -11,6 +11,13 @@ details. */
#include <errno.h> #include <errno.h>
#include "regparm.h" #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_win_error (const char *file, int line, DWORD code);
void __reg3 seterrno_from_nt_status (const char *file, int line, NTSTATUS status); 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*/); 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)) #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) #define get_errno() (errno)
extern "C" void __stdcall set_sig_errno (int e); extern "C" void __stdcall set_sig_errno (int e);

View File

@ -31,12 +31,7 @@ details. */
#define X(w, e) {ERROR_##w, #w, e} #define X(w, e) {ERROR_##w, #w, e}
static const struct static const errmap_t errmap[] =
{
DWORD w; /* windows version of error */
const char *s; /* text of windows version */
int e; /* errno version of error */
} errmap[] =
{ {
/* FIXME: Some of these choices are arbitrary! */ /* FIXME: Some of these choices are arbitrary! */
X (ACCESS_DENIED, EACCES), X (ACCESS_DENIED, EACCES),

View File

@ -150,14 +150,7 @@ inet_makeaddr (int net, int lna)
return in; return in;
} }
struct tl static const errmap_t wsock_errmap[] = {
{
int w;
const char *s;
int e;
};
static const struct tl errmap[] = {
{WSA_INVALID_HANDLE, "WSA_INVALID_HANDLE", EBADF}, {WSA_INVALID_HANDLE, "WSA_INVALID_HANDLE", EBADF},
{WSA_NOT_ENOUGH_MEMORY, "WSA_NOT_ENOUGH_MEMORY", ENOMEM}, {WSA_NOT_ENOUGH_MEMORY, "WSA_NOT_ENOUGH_MEMORY", ENOMEM},
{WSA_INVALID_PARAMETER, "WSA_INVALID_PARAMETER", EINVAL}, {WSA_INVALID_PARAMETER, "WSA_INVALID_PARAMETER", EINVAL},
@ -206,11 +199,11 @@ static const struct tl errmap[] = {
}; };
static int static int
find_winsock_errno (int why) find_winsock_errno (DWORD why)
{ {
for (int i = 0; errmap[i].s != NULL; ++i) for (int i = 0; wsock_errmap[i].s != NULL; ++i)
if (why == errmap[i].w) if (why == wsock_errmap[i].w)
return errmap[i].e; return wsock_errmap[i].e;
return EPERM; 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 * Since the member `s' isn't used for debug output we can use it
* for the error text returned by herror and hstrerror. * 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}, {WSAHOST_NOT_FOUND, "Unknown host", HOST_NOT_FOUND},
{WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN}, {WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN},
{WSANO_RECOVERY, "Unknown server error", NO_RECOVERY}, {WSANO_RECOVERY, "Unknown server error", NO_RECOVERY},
@ -242,7 +235,7 @@ set_host_errno ()
{ {
int i; int i;
int why = WSAGetLastError (); DWORD why = WSAGetLastError ();
for (i = 0; host_errmap[i].w != 0; ++i) for (i = 0; host_errmap[i].w != 0; ++i)
if (why == host_errmap[i].w) if (why == host_errmap[i].w)

View File

@ -212,9 +212,6 @@ bool timeval_to_ms (const struct timeval *, DWORD &);
void __stdcall set_console_title (char *); void __stdcall set_console_title (char *);
void init_console_handler (bool); 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; extern bool wsock_started;
/* Printf type functions */ /* Printf type functions */