SCCS-vsn: bin/rcp/util.c 8.2
-static char sccsid[] = "@(#)util.c 8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)util.c 8.2 (Berkeley) %G%";
#endif /* not lint */
#include <sys/param.h>
#endif /* not lint */
#include <sys/param.h>
{
if (*cp == ':') /* Leading colon is part of file name. */
return (0);
{
if (*cp == ':') /* Leading colon is part of file name. */
return (0);
- register int c;
- register char *cp;
- register sig_t istat, qstat;
- int status, pid, w;
-
- if ((pid = vfork()) == 0) {
+ sig_t istat, qstat;
+ int status, w;
+ pid_t pid;
+
+ pid = vfork();
+ switch (pid) {
+ case -1:
+ return (127);
+
+ case 0:
(void)setuid(userid);
execl(_PATH_BSHELL, "sh", "-c", s, NULL);
_exit(127);
}
istat = signal(SIGINT, SIG_IGN);
qstat = signal(SIGQUIT, SIG_IGN);
(void)setuid(userid);
execl(_PATH_BSHELL, "sh", "-c", s, NULL);
_exit(127);
}
istat = signal(SIGINT, SIG_IGN);
qstat = signal(SIGQUIT, SIG_IGN);
- while ((w = wait(&status)) != pid && w != -1)
- ;
- if (w == -1)
+ if (waitpid(pid, &status, 0) < 0)
status = -1;
(void)signal(SIGINT, istat);
(void)signal(SIGQUIT, qstat);
status = -1;
(void)signal(SIGINT, istat);
(void)signal(SIGQUIT, qstat);