summaryrefslogtreecommitdiffstats
path: root/win/tclWinError.c
diff options
context:
space:
mode:
Diffstat (limited to 'win/tclWinError.c')
-rw-r--r--win/tclWinError.c59
1 files changed, 19 insertions, 40 deletions
diff --git a/win/tclWinError.c b/win/tclWinError.c
index 30079b9..a74d2e2 100644
--- a/win/tclWinError.c
+++ b/win/tclWinError.c
@@ -11,11 +11,13 @@
*/
#include "tclInt.h"
+#include "tclPort.h"
+
/*
* The following table contains the mapping from Win32 errors to errno errors.
*/
-static const unsigned char errorTable[] = {
+static CONST unsigned char errorTable[] = {
0,
EINVAL, /* ERROR_INVALID_FUNCTION 1 */
ENOENT, /* ERROR_FILE_NOT_FOUND 2 */
@@ -291,7 +293,7 @@ static const unsigned char errorTable[] = {
* errno errors.
*/
-static const unsigned char wsaErrorTable[] = {
+static CONST int wsaErrorTable[] = {
EWOULDBLOCK, /* WSAEWOULDBLOCK */
EINPROGRESS, /* WSAEINPROGRESS */
EALREADY, /* WSAEALREADY */
@@ -362,62 +364,39 @@ TclWinConvertError(
Tcl_SetErrno(errorTable[errCode]);
}
}
-
-#ifdef __CYGWIN__
+
/*
*----------------------------------------------------------------------
*
- * tclWinDebugPanic --
+ * TclWinConvertWSAError --
*
- * Display a message. If a debugger is present, present it directly to
- * the debugger, otherwise send it to stderr.
+ * This routine converts a WinSock error into an errno value.
*
* Results:
* None.
*
* Side effects:
- * None.
+ * Sets the errno global variable.
*
*----------------------------------------------------------------------
*/
-TCL_NORETURN void
-tclWinDebugPanic(
- const char *format, ...)
+void
+TclWinConvertWSAError(
+ DWORD errCode) /* Win32 error code. */
{
-#define TCL_MAX_WARN_LEN 1024
- va_list argList;
- va_start(argList, format);
-
- if (IsDebuggerPresent()) {
- WCHAR msgString[TCL_MAX_WARN_LEN];
- char buf[TCL_MAX_WARN_LEN * TCL_UTF_MAX];
-
- vsnprintf(buf, sizeof(buf), format, argList);
- msgString[TCL_MAX_WARN_LEN-1] = L'\0';
- MultiByteToWideChar(CP_UTF8, 0, buf, -1, msgString, TCL_MAX_WARN_LEN);
-
- /*
- * Truncate MessageBox string if it is too long to not overflow the buffer.
- */
-
- if (msgString[TCL_MAX_WARN_LEN-1] != L'\0') {
- memcpy(msgString + (TCL_MAX_WARN_LEN - 5), L" ...", 5 * sizeof(WCHAR));
+ if (errCode >= sizeof(errorTable)/sizeof(errorTable[0])) {
+ errCode -= WSAEWOULDBLOCK;
+ if (errCode >= sizeof(wsaErrorTable)/sizeof(wsaErrorTable[0])) {
+ Tcl_SetErrno(errorTable[1]);
+ } else {
+ Tcl_SetErrno(wsaErrorTable[errCode]);
}
- OutputDebugStringW(msgString);
} else {
- vfprintf(stderr, format, argList);
- fprintf(stderr, "\n");
- fflush(stderr);
+ Tcl_SetErrno(errorTable[errCode]);
}
-# if defined(__GNUC__)
- __builtin_trap();
-# else
- DebugBreak();
-# endif
- abort();
}
-#endif
+
/*
* Local Variables:
* mode: c