From e9cf3b3bf56646e94df9189bfe8d6449b79ca0fb Mon Sep 17 00:00:00 2001 From: eban Date: Mon, 13 Nov 2000 10:11:31 +0000 Subject: [PATCH] eban git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 2 +- process.c | 2 +- win32/win32.c | 15 +++++++++------ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 846402202d..9b7ab98aa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 13 19:02:08 2000 WATANABE Hirofumi + + * win32/win32.c, io.c, process.c: the exit status of program must be + multiplied 256 on mswin32 and msdosdjgpp(system(), ``). + Sat Nov 11 22:57:38 2000 Yukihiro Matsumoto * parse.y (arg): uniformed treatment of -a**b, where a is a diff --git a/io.c b/io.c index 4458323423..1cdc5f1959 100644 --- a/io.c +++ b/io.c @@ -1519,7 +1519,7 @@ pipe_finalize(fptr) status = pclose(fptr->f2); } fptr->f = fptr->f2 = 0; -#if defined DJGPP || (defined NT && !defined __BORLANDC__) +#if defined DJGPP status <<= 8; #endif rb_last_status = INT2FIX(status); diff --git a/process.c b/process.c index 88fac00ac3..31505c8578 100644 --- a/process.c +++ b/process.c @@ -657,7 +657,7 @@ rb_f_system(argc, argv) Check_SafeStr(cmd); state = system(RSTRING(cmd)->ptr); - rb_last_status = INT2FIX(state); + rb_last_status = INT2FIX((state & 0xff) << 8); if (state == 0) return Qtrue; return Qfalse; 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;