diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | io.c | 2 | ||||
-rw-r--r-- | process.c | 2 | ||||
-rw-r--r-- | win32/win32.c | 15 |
4 files changed, 16 insertions, 8 deletions
@@ -1,3 +1,8 @@ +Mon Nov 13 19:02:08 2000 WATANABE Hirofumi <eban@ruby-lang.org> + + * 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 <matz@ruby-lang.org> * parse.y (arg): uniformed treatment of -a**b, where a is a @@ -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); @@ -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; |