rework susystem
authorJan-Simon Pendry <pendry@ucbvax.Berkeley.EDU>
Sat, 2 Apr 1994 22:42:03 +0000 (14:42 -0800)
committerJan-Simon Pendry <pendry@ucbvax.Berkeley.EDU>
Sat, 2 Apr 1994 22:42:03 +0000 (14:42 -0800)
SCCS-vsn: bin/rcp/util.c 8.2

usr/src/bin/rcp/util.c

index e56ffdf..b690842 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-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>
@@ -27,7 +27,7 @@ static char sccsid[] = "@(#)util.c    8.1 (Berkeley) %G%";
 
 char *
 colon(cp)
 
 char *
 colon(cp)
-       register char *cp;
+       char *cp;
 {
        if (*cp == ':')         /* Leading colon is part of file name. */
                return (0);
 {
        if (*cp == ':')         /* Leading colon is part of file name. */
                return (0);
@@ -60,8 +60,8 @@ int
 okname(cp0)
        char *cp0;
 {
 okname(cp0)
        char *cp0;
 {
-       register int c;
-       register char *cp;
+       int c;
+       char *cp;
 
        cp = cp0;
        do {
 
        cp = cp0;
        do {
@@ -82,19 +82,23 @@ susystem(s, userid)
        int userid;
        char *s;
 {
        int userid;
        char *s;
 {
-       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);