diff options
author | des <des@FreeBSD.org> | 1998-10-20 11:34:11 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 1998-10-20 11:34:11 +0000 |
commit | 1c3787c6df085dec76e6a1224cb3a3eb832f7831 (patch) | |
tree | fae18c6119e48778a8b728984f1333a122d7b99e /lib/libutil/pw_util.c | |
parent | 83b8dc833cb83cfed89987cdd048b8e45643b372 (diff) | |
download | FreeBSD-src-1c3787c6df085dec76e6a1224cb3a3eb832f7831.zip FreeBSD-src-1c3787c6df085dec76e6a1224cb3a3eb832f7831.tar.gz |
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>
Diffstat (limited to 'lib/libutil/pw_util.c')
-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 d005d16..8a74fc01 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); |