diff options
author | Dag-Erling Smørgrav <des@FreeBSD.org> | 1998-10-20 11:34:11 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 1998-10-20 11:34:11 +0000 |
commit | 4da8edd59ed91c145d89d24c82d14cd66c32fd97 (patch) | |
tree | eaf43f9ef49f1e38421f1432204e5758e0f124ad /lib/libutil | |
parent | 37a182e2b27683ffbbdb2fa04122ea710d1b953d (diff) | |
download | src-4da8edd59ed91c145d89d24c82d14cd66c32fd97.tar.gz src-4da8edd59ed91c145d89d24c82d14cd66c32fd97.zip |
Since vfork() was changed to fork(), we have to pass errno back from the
child to the parent somehow.
PR: 8353
Submitted by: Andrew J. Korty <ajk@purdue.edu>
Notes
Notes:
svn path=/head/; revision=40538
Diffstat (limited to 'lib/libutil')
-rw-r--r-- | lib/libutil/pw_util.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/libutil/pw_util.c b/lib/libutil/pw_util.c index d005d1610696..8a74fc01f881 100644 --- a/lib/libutil/pw_util.c +++ b/lib/libutil/pw_util.c @@ -36,7 +36,7 @@ static const char sccsid[] = "@(#)pw_util.c 8.3 (Berkeley) 4/2/94"; #endif static const char rcsid[] = - "$Id: pw_util.c,v 1.9 1997/10/27 07:53:19 charnier Exp $"; + "$Id: pw_util.c,v 1.10 1998/10/13 14:52:33 des Exp $"; #endif /* not lint */ /* @@ -45,6 +45,7 @@ static const char rcsid[] = */ #include <sys/param.h> +#include <sys/errno.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/stat.h> @@ -185,16 +186,18 @@ pw_edit(notsetuid) (void)setgid(getgid()); (void)setuid(getuid()); } + errno = 0; execlp(editor, p, tempname, NULL); - _exit(1); + _exit(errno); } for (;;) { editpid = waitpid(editpid, (int *)&pstat, WUNTRACED); + errno = WEXITSTATUS(pstat); if (editpid == -1) pw_error(editor, 1, 1); else if (WIFSTOPPED(pstat)) raise(WSTOPSIG(pstat)); - else if (WIFEXITED(pstat) && WEXITSTATUS(pstat) == 0) + else if (WIFEXITED(pstat) && errno == 0) break; else pw_error(editor, 1, 1); |