summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/errno.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/errno.cc')
-rw-r--r--winsup/cygwin/errno.cc47
1 files changed, 23 insertions, 24 deletions
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc
index 1485c1906..25dcf705c 100644
--- a/winsup/cygwin/errno.cc
+++ b/winsup/cygwin/errno.cc
@@ -12,6 +12,7 @@ details. */
#define _REENT_ONLY
#include <stdio.h>
#include <errno.h>
+#include "cygerrno.h"
/* Table to map Windows error codes to Errno values. */
/* FIXME: Doing things this way is a little slow. It's trivial to change
@@ -21,7 +22,7 @@ details. */
static const struct
{
- int w; /* windows version of error */
+ DWORD w; /* windows version of error */
const char *s; /* text of windows version */
int e; /* errno version of error */
}
@@ -108,34 +109,33 @@ errmap[] =
{ 0, NULL, 0}
};
-/* seterrno_from_win_error: Given a Windows error code, set errno
- as appropriate. */
-void
-seterrno_from_win_error (const char *file, int line, int code)
+int __stdcall
+geterrno_from_win_error (DWORD code, int deferrno)
{
- int i;
-
- for (i = 0; errmap[i].w != 0; ++i)
+ for (int i = 0; errmap[i].w != 0; ++i)
if (code == errmap[i].w)
- break;
+ {
+ syscall_printf ("windows error %u == errno %d", code, errmap[i].e);
+ return errmap[i].e;
+ }
- if (errmap[i].w != 0)
- {
- if (strace.active)
- strace.prntf (_STRACE_SYSCALL, NULL, "%s:%d seterrno: %d (%s) -> %d",
- file, line, code, errmap[i].s, errmap[i].e);
- set_errno (errmap[i].e);
- }
- else
- {
- if (strace.active)
- strace.prntf (_STRACE_SYSCALL, NULL, "%s:%d seterrno: unknown error %d", file, line, code);
- set_errno (EACCES);
- }
+ syscall_printf ("unknown windows error %u, setting errno to %d", code,
+ deferrno);
+ return deferrno; /* FIXME: what's so special about EACCESS? */
+}
+
+/* seterrno_from_win_error: Given a Windows error code, set errno
+ as appropriate. */
+void __stdcall
+seterrno_from_win_error (const char *file, int line, DWORD code)
+{
+ syscall_printf ("%s:%d \b");
+ set_errno (geterrno_from_win_error (code, EACCES));
+ return;
}
/* seterrno: Set `errno' based on GetLastError (). */
-void
+void __stdcall
seterrno (const char *file, int line)
{
seterrno_from_win_error (file, line, GetLastError ());
@@ -672,4 +672,3 @@ strerror (int errnum)
include files. */
return (char *) error;
}
-