=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/script/script.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** src/usr.bin/script/script.c 1998/12/19 23:52:03 1.10 --- src/usr.bin/script/script.c 2000/03/22 20:25:19 1.11 *************** *** 1,4 **** ! /* $OpenBSD: script.c,v 1.10 1998/12/19 23:52:03 deraadt Exp $ */ /* $NetBSD: script.c,v 1.3 1994/12/21 08:55:43 jtc Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: script.c,v 1.11 2000/03/22 20:25:19 ericj Exp $ */ /* $NetBSD: script.c,v 1.3 1994/12/21 08:55:43 jtc Exp $ */ /* *************** *** 44,50 **** #if 0 static char sccsid[] = "@(#)script.c 8.1 (Berkeley) 6/6/93"; #endif ! static char rcsid[] = "$OpenBSD: script.c,v 1.10 1998/12/19 23:52:03 deraadt Exp $"; #endif /* not lint */ #include --- 44,50 ---- #if 0 static char sccsid[] = "@(#)script.c 8.1 (Berkeley) 6/6/93"; #endif ! static char rcsid[] = "$OpenBSD: script.c,v 1.11 2000/03/22 20:25:19 ericj Exp $"; #endif /* not lint */ #include *************** *** 75,81 **** struct termios tt; ! __dead void done __P((void)); void dooutput __P((void)); void doshell __P((void)); void fail __P((void)); --- 75,81 ---- struct termios tt; ! __dead void done __P((int)); void dooutput __P((void)); void doshell __P((void)); void fail __P((void)); *************** *** 147,154 **** (void)fclose(fscript); while ((cc = read(STDIN_FILENO, ibuf, BUFSIZ)) > 0) (void)write(master, ibuf, cc); ! done(); ! exit(0); } void --- 147,153 ---- (void)fclose(fscript); while ((cc = read(STDIN_FILENO, ibuf, BUFSIZ)) > 0) (void)write(master, ibuf, cc); ! done(0); } void *************** *** 157,171 **** { register int die, pid; int save_errno = errno; ! int status; ! die = 0; while ((pid = wait3(&status, WNOHANG, 0)) > 0) ! if (pid == child) die = 1; if (die) ! done(); errno = save_errno; } --- 156,175 ---- { register int die, pid; int save_errno = errno; ! int status, e; ! die = e = 0; while ((pid = wait3(&status, WNOHANG, 0)) > 0) ! if (pid == child) { die = 1; + if (WIFEXITED(status)) + e = WEXITSTATUS(status); + else + e = 1; + } if (die) ! done(e); errno = save_errno; } *************** *** 194,200 **** (void)fwrite(obuf, 1, cc, fscript); outcc += cc; } ! done(); } void --- 198,204 ---- (void)fwrite(obuf, 1, cc, fscript); outcc += cc; } ! done(0); } void *************** *** 232,242 **** { (void)kill(0, SIGTERM); ! done(); } void ! done() { time_t tvec; --- 236,247 ---- { (void)kill(0, SIGTERM); ! done(1); } void ! done(eval) ! int eval; { time_t tvec; *************** *** 249,254 **** (void)tcsetattr(STDIN_FILENO, TCSAFLUSH, &tt); (void)printf("Script done, output file is %s\n", fname); } ! exit(0); } --- 254,259 ---- (void)tcsetattr(STDIN_FILENO, TCSAFLUSH, &tt); (void)printf("Script done, output file is %s\n", fname); } ! exit(eval); }