return i;
}
+void setcloexec(int fd) {
+ int r=fcntl(fd, F_GETFD);
+ if (r<0) fatal_perror("fcntl(,F_GETFD) failed");
+ r |= FD_CLOEXEC;
+ r=fcntl(fd, F_SETFD, r|FD_CLOEXEC);
+ if (r<0) fatal_perror("fcntl(,F_SETFD,|FD_CLOEXEC) failed");
+}
+
+void pipe_cloexec(int fd[2]) {
+ int r=pipe(fd);
+ if (r) fatal_perror("pipe");
+ setcloexec(fd[0]);
+ setcloexec(fd[1]);
+}
+
static const char *phases[NR_PHASES]={
"PHASE_INIT",
"PHASE_GETOPTS",