=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sendbug/sendbug.c,v retrieving revision 1.45 retrieving revision 1.46 diff -c -r1.45 -r1.46 *** src/usr.bin/sendbug/sendbug.c 2007/05/06 05:01:19 1.45 --- src/usr.bin/sendbug/sendbug.c 2007/05/07 02:11:12 1.46 *************** *** 1,4 **** ! /* $OpenBSD: sendbug.c,v 1.45 2007/05/06 05:01:19 ray Exp $ */ /* * Written by Ray Lai . --- 1,4 ---- ! /* $OpenBSD: sendbug.c,v 1.46 2007/05/07 02:11:12 ray Exp $ */ /* * Written by Ray Lai . *************** *** 241,279 **** sighup = signal(SIGHUP, SIG_IGN); sigint = signal(SIGINT, SIG_IGN); sigquit = signal(SIGQUIT, SIG_IGN); ! top: ! if ((pid = fork()) == -1) { ! saved_errno = errno; ! ! if (saved_errno == EAGAIN) { sleep(1); ! goto top; ! } ! (void)signal(SIGHUP, sighup); ! (void)signal(SIGINT, sigint); ! (void)signal(SIGQUIT, sigquit); ! free(p); ! errno = saved_errno; ! return (-1); ! } if (pid == 0) { execv(_PATH_BSHELL, argp); _exit(127); } free(p); - for (;;) { - if (waitpid(pid, &st, 0) == -1) { - if (errno != EINTR) { - saved_errno = errno; - (void)signal(SIGHUP, sighup); - (void)signal(SIGINT, sigint); - (void)signal(SIGQUIT, sigquit); - errno = saved_errno; - return (-1); - } - } else - break; - } (void)signal(SIGHUP, sighup); (void)signal(SIGINT, sigint); (void)signal(SIGQUIT, sigquit); --- 241,259 ---- sighup = signal(SIGHUP, SIG_IGN); sigint = signal(SIGINT, SIG_IGN); sigquit = signal(SIGQUIT, SIG_IGN); ! while ((pid = fork()) == -1) ! if (errno == EAGAIN) sleep(1); ! else ! goto fail; if (pid == 0) { execv(_PATH_BSHELL, argp); _exit(127); } + while (waitpid(pid, &st, 0) == -1) + if (errno != EINTR) + goto fail; free(p); (void)signal(SIGHUP, sighup); (void)signal(SIGINT, sigint); (void)signal(SIGQUIT, sigquit); *************** *** 282,287 **** --- 262,276 ---- return (-1); } return (0); + + fail: + saved_errno = errno; + (void)signal(SIGHUP, sighup); + (void)signal(SIGINT, sigint); + (void)signal(SIGQUIT, sigquit); + free(p); + errno = saved_errno; + return (-1); } int