summaryrefslogtreecommitdiff
path: root/win32/win32.c
diff options
context:
space:
mode:
authoreban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-13 10:11:31 +0000
committereban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-13 10:11:31 +0000
commite9cf3b3bf56646e94df9189bfe8d6449b79ca0fb (patch)
tree259d2feaf2b84b2ef99ca34eef43d465a3134620 /win32/win32.c
parent2a1b0ff2326ae53c299206f983413fa00a2c7ec5 (diff)
eban
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32/win32.c')
-rw-r--r--win32/win32.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/win32/win32.c b/win32/win32.c
index a2b256d74d..7a2dea8848 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -653,7 +653,7 @@ mypclose(FILE *fp)
MyPopenRecord[i].pipe = NULL;
MyPopenRecord[i].pid = 0;
- return exitcode;
+ return (int)((exitcode & 0xff) << 8);
}
#endif
@@ -673,7 +673,7 @@ char *cmd;
register char **a;
register char *s;
char **argv;
- int status;
+ int status = -1;
char *shell, *cmd2;
int mode = NtSyncProcess ? P_WAIT : P_NOWAIT;
@@ -703,13 +703,13 @@ char *cmd;
status = spawnvpe(mode, argv[0], argv, environ);
/* return spawnle(mode, shell, shell, "-c", cmd, (char*)0, environ); */
free(cmdline);
- return status;
+ return (int)((status & 0xff) << 8);
}
}
else if ((shell = getenv("COMSPEC")) != 0) {
if (NtHasRedirection(cmd) /* || isInternalCmd(cmd) */) {
- do_comspec_shell:
- return spawnle(mode, shell, shell, "/c", cmd, (char*)0, environ);
+ status = spawnle(mode, shell, shell, "/c", cmd, (char*)0, environ);
+ return (int)((status & 0xff) << 8);
}
}
@@ -735,7 +735,7 @@ char *cmd;
}
free(cmd2);
free(argv);
- return status;
+ return (int)((status & 0xff) << 8);
}
#endif
@@ -2344,6 +2344,9 @@ waitpid (pid_t pid, int *stat_loc, int options)
}
if (WaitForSingleObject((HANDLE) pid, timeout) == WAIT_OBJECT_0) {
pid = _cwait(stat_loc, pid, 0);
+#if !defined __BORLANDC__
+ *stat_loc <<= 8;
+#endif
return pid;
}
return 0;