summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorpatthoyts <patthoyts@noemail.net>2005-11-04 23:01:38 (GMT)
committerpatthoyts <patthoyts@noemail.net>2005-11-04 23:01:38 (GMT)
commitc35a26c82e3134b2f524b89abfb3f7e2c58ba4f5 (patch)
treead307b6f7f7d668f3002bfa09ea7896295955457 /win
parent5f19cc5582416636860ba618987cf45bc742e2b5 (diff)
downloadtcl-c35a26c82e3134b2f524b89abfb3f7e2c58ba4f5.zip
tcl-c35a26c82e3134b2f524b89abfb3f7e2c58ba4f5.tar.gz
tcl-c35a26c82e3134b2f524b89abfb3f7e2c58ba4f5.tar.bz2
* win/tclWinPort.h: Applied patch #1267871 by Matt Newman for
* win/tclWinPipe.c: extended error code support on Windows. * tests/exec.test: Tests for extended error codes. * generic/tclPipe.c: Permit long codes (platform macros permitting). FossilOrigin-Name: e69a0476efd6b58dbd9cbb23631ea18f13fc114d
Diffstat (limited to 'win')
-rw-r--r--win/tclWinPipe.c18
-rw-r--r--win/tclWinPort.h10
2 files changed, 14 insertions, 14 deletions
diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c
index 93e9655..80eb3c0 100644
--- a/win/tclWinPipe.c
+++ b/win/tclWinPipe.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclWinPipe.c,v 1.60 2005/11/04 00:06:50 dkf Exp $
+ * RCS: @(#) $Id: tclWinPipe.c,v 1.61 2005/11/04 23:01:40 patthoyts Exp $
*/
#include "tclWinInt.h"
@@ -2579,12 +2579,12 @@ Tcl_WaitPid(
case EXCEPTION_FLT_UNDERFLOW:
case EXCEPTION_INT_DIVIDE_BY_ZERO:
case EXCEPTION_INT_OVERFLOW:
- *statPtr = SIGFPE;
+ *statPtr = 0xC0000000 | SIGFPE;
break;
case EXCEPTION_PRIV_INSTRUCTION:
case EXCEPTION_ILLEGAL_INSTRUCTION:
- *statPtr = SIGILL;
+ *statPtr = 0xC0000000 | SIGILL;
break;
case EXCEPTION_ACCESS_VIOLATION:
@@ -2594,20 +2594,20 @@ Tcl_WaitPid(
case EXCEPTION_INVALID_DISPOSITION:
case EXCEPTION_GUARD_PAGE:
case EXCEPTION_INVALID_HANDLE:
- *statPtr = SIGSEGV;
+ *statPtr = 0xC0000000 | SIGSEGV;
break;
case EXCEPTION_DATATYPE_MISALIGNMENT:
- *statPtr = SIGBUS;
+ *statPtr = 0xC0000000 | SIGBUS;
break;
case EXCEPTION_BREAKPOINT:
case EXCEPTION_SINGLE_STEP:
- *statPtr = SIGTRAP;
+ *statPtr = 0xC0000000 | SIGTRAP;
break;
case CONTROL_C_EXIT:
- *statPtr = SIGINT;
+ *statPtr = 0xC0000000 | SIGINT;
break;
default:
@@ -2622,13 +2622,13 @@ Tcl_WaitPid(
* truncating it.
*/
- *statPtr = (((int)(short) exitCode << 8) & 0xffff00);
+ *statPtr = exitCode;
break;
}
result = pid;
} else {
errno = ECHILD;
- *statPtr = ECHILD;
+ *statPtr = 0xC0000000 | ECHILD;
result = (Tcl_Pid) -1;
}
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index 984682f..29c777b 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclWinPort.h,v 1.46 2005/11/03 00:17:31 patthoyts Exp $
+ * RCS: @(#) $Id: tclWinPort.h,v 1.47 2005/11/04 23:01:40 patthoyts Exp $
*/
#ifndef _TCLWINPORT
@@ -240,15 +240,15 @@
#endif /* TCL_UNION_WAIT */
#ifndef WIFEXITED
-# define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0)
+# define WIFEXITED(stat) (((*((int *) &(stat))) & 0xC0000000) == 0)
#endif
#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat) (short)(((*((int *) &(stat))) >> 8) & 0xffff)
+# define WEXITSTATUS(stat) (*((int *) &(stat)))
#endif
#ifndef WIFSIGNALED
-# define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff)))
+# define WIFSIGNALED(stat) ((*((int *) &(stat))) & 0xC0000000)
#endif
#ifndef WTERMSIG
@@ -256,7 +256,7 @@
#endif
#ifndef WIFSTOPPED
-# define WIFSTOPPED(stat) (((*((int *) &(stat))) & 0xff) == 0177)
+# define WIFSTOPPED(stat) 0
#endif
#ifndef WSTOPSIG