Date: Sun, 2 Jun 2002 01:01:08 -0400 From: Mike Barcroft <mike@FreeBSD.org> To: arch@FreeBSD.org Subject: Removing wait union Message-ID: <20020602010108.B16166@espresso.q9media.com>
next in thread | raw e-mail | index | archive | help
--oC1+HKm2/end4ao3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Does anyone have any objections to removing the deprecated 4.2/4.3BSD wait union in <sys/wait.h>? It's been deprecating since Rev 1.1 and there are only a few consumers in the base system. Attached are two patches, one to removing it from <sys/wait.h> and the other to remove its consumers. Changes to lpd(8) sent directly to its maintainer. Best regards, Mike Barcroft --oC1+HKm2/end4ao3 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="waith.diff" Remove the deprecated 4.2/4.3BSD wait union. Index: wait.h =================================================================== RCS file: /work/repo/src/sys/sys/wait.h,v retrieving revision 1.16 diff -u -r1.16 wait.h --- wait.h 1 Jun 2002 21:07:10 -0000 1.16 +++ wait.h 2 Jun 2002 04:43:35 -0000 @@ -37,6 +37,8 @@ #ifndef _SYS_WAIT_H_ #define _SYS_WAIT_H_ +#include <sys/cdefs.h> + /* * This file holds definitions relevant to the wait4 system call and the * alternate interfaces that use it (wait, wait3, waitpid). @@ -86,71 +88,16 @@ #define WLINUXCLONE 0x80000000 /* Wait for kthread spawned from linux_clone. */ #endif -#if __BSD_VISIBLE -/* POSIX extensions and 4.2/4.3 compatibility: */ - /* * Tokens for special values of the "pid" parameter to wait4. */ +#if __BSD_VISIBLE #define WAIT_ANY (-1) /* any process */ #define WAIT_MYPGRP 0 /* any process in my process group */ - -#include <machine/endian.h> - -/* - * Deprecated: - * Structure of the information in the status word returned by wait4. - * If w_stopval==WSTOPPED, then the second structure describes - * the information returned, else the first. - */ -union wait { - int w_status; /* used in syscall */ - /* - * Terminated process status. - */ - struct { -#if _BYTE_ORDER == _LITTLE_ENDIAN - unsigned int w_Termsig:7, /* termination signal */ - w_Coredump:1, /* core dump indicator */ - w_Retcode:8, /* exit code if w_termsig==0 */ - w_Filler:16; /* upper bits filler */ -#endif -#if _BYTE_ORDER == _BIG_ENDIAN - unsigned int w_Filler:16, /* upper bits filler */ - w_Retcode:8, /* exit code if w_termsig==0 */ - w_Coredump:1, /* core dump indicator */ - w_Termsig:7; /* termination signal */ -#endif - } w_T; - /* - * Stopped process status. Returned only for traced children unless - * requested with the WUNTRACED option bit. - */ - struct { -#if _BYTE_ORDER == _LITTLE_ENDIAN - unsigned int w_Stopval:8, /* == W_STOPPED if stopped */ - w_Stopsig:8, /* signal that stopped us */ - w_Filler:16; /* upper bits filler */ -#endif -#if _BYTE_ORDER == _BIG_ENDIAN - unsigned int w_Filler:16, /* upper bits filler */ - w_Stopsig:8, /* signal that stopped us */ - w_Stopval:8; /* == W_STOPPED if stopped */ -#endif - } w_S; -}; -#define w_termsig w_T.w_Termsig -#define w_coredump w_T.w_Coredump -#define w_retcode w_T.w_Retcode -#define w_stopval w_S.w_Stopval -#define w_stopsig w_S.w_Stopsig - -#define WSTOPPED _WSTOPPED #endif /* __BSD_VISIBLE */ #ifndef _KERNEL #include <sys/types.h> -#include <sys/cdefs.h> __BEGIN_DECLS struct rusage; /* forward declaration */ --oC1+HKm2/end4ao3 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="waitu.diff" Use POSIX macros for wait(2)-style status information instead of the deprecated 4.2/4.3BSD wait union. Fix some nearby pid_t/int confusion. Index: games/cribbage/instr.c =================================================================== RCS file: /work/repo/src/games/cribbage/instr.c,v retrieving revision 1.5 diff -u -r1.5 instr.c --- games/cribbage/instr.c 12 Dec 1999 03:04:15 -0000 1.5 +++ games/cribbage/instr.c 2 Jun 2002 04:46:42 -0000 @@ -58,8 +58,8 @@ instructions() { struct stat sb; - union wait pstat; pid_t pid; + int pstat; char *pager, *path; if (stat(_PATH_INSTR, &sb)) { @@ -84,7 +84,7 @@ do { pid = waitpid(pid, (int *)&pstat, 0); } while (pid == -1 && errno == EINTR); - if (pid == -1 || pstat.w_status) + if (pid == -1 || WEXITSTATUS(pstat) || WTERMSIG(pstat)) exit(1); } } Index: games/sail/pl_1.c =================================================================== RCS file: /work/repo/src/games/sail/pl_1.c,v retrieving revision 1.2 diff -u -r1.2 pl_1.c --- games/sail/pl_1.c 30 Nov 1999 03:49:36 -0000 1.2 +++ games/sail/pl_1.c 2 Jun 2002 04:47:55 -0000 @@ -126,8 +126,8 @@ void child() { - union wait status; - int pid; + pid_t pid; + int status; (void) signal(SIGCHLD, SIG_IGN); do { Index: gnu/lib/libdialog/raw_popen.c =================================================================== RCS file: /work/repo/src/gnu/lib/libdialog/raw_popen.c,v retrieving revision 1.3 diff -u -r1.3 raw_popen.c --- gnu/lib/libdialog/raw_popen.c 9 Jul 2001 09:23:38 -0000 1.3 +++ gnu/lib/libdialog/raw_popen.c 2 Jun 2002 01:03:41 -0000 @@ -131,8 +131,7 @@ raw_pclose(FILE *iop) { register struct pid *cur, *last; - int omask; - union wait pstat; + int omask, pstat; pid_t pid; (void)fclose(iop); @@ -158,5 +157,5 @@ last->next = cur->next; free(cur); - return (pid == -1 ? -1 : pstat.w_status); + return (pid == -1 ? -1 : pstat); } Index: usr.bin/rlogin/rlogin.c =================================================================== RCS file: /work/repo/src/usr.bin/rlogin/rlogin.c,v retrieving revision 1.32 diff -u -r1.32 rlogin.c --- usr.bin/rlogin/rlogin.c 8 May 2002 00:46:30 -0000 1.32 +++ usr.bin/rlogin/rlogin.c 2 Jun 2002 04:50:45 -0000 @@ -468,16 +468,16 @@ void catch_child(int signo __unused) { - union wait status; - int pid; + pid_t pid; + int status; for (;;) { - pid = wait3((int *)&status, WNOHANG|WUNTRACED, NULL); + pid = wait3(&status, WNOHANG|WUNTRACED, NULL); if (pid == 0) return; /* if the child (reader) dies, just quit */ if (pid < 0 || (pid == child && !WIFSTOPPED(status))) - done((int)(status.w_termsig | status.w_retcode)); + done(WTERMSIG(status) | WEXITSTATUS(status)); } /* NOTREACHED */ } Index: usr.bin/script/script.c =================================================================== RCS file: /work/repo/src/usr.bin/script/script.c,v retrieving revision 1.18 diff -u -r1.18 script.c --- usr.bin/script/script.c 22 Mar 2002 01:42:27 -0000 1.18 +++ usr.bin/script/script.c 2 Jun 2002 02:30:34 -0000 @@ -209,11 +209,11 @@ void finish() { - int die, e, pid; - union wait status; + pid_t pid; + int die, e, status; die = e = 0; - while ((pid = wait3((int *)&status, WNOHANG, 0)) > 0) + while ((pid = wait3(&status, WNOHANG, 0)) > 0) if (pid == child) { die = 1; if (WIFEXITED(status)) Index: usr.bin/window/wwchild.c =================================================================== RCS file: /work/repo/src/usr.bin/window/wwchild.c,v retrieving revision 1.4 diff -u -r1.4 wwchild.c --- usr.bin/window/wwchild.c 17 May 2001 09:38:48 -0000 1.4 +++ usr.bin/window/wwchild.c 2 Jun 2002 04:51:38 -0000 @@ -48,10 +48,9 @@ void wwchild() { - int olderrno; register struct ww **wp; - union wait w; - int pid; + pid_t pid; + int olderrno, w; char collected = 0; olderrno = errno; --oC1+HKm2/end4ao3-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020602010108.B16166>