static int on_sigchld(int *sigchld_fd, pid_t pid, int *stdin_fd) { struct signalfd_siginfo si; ssize_t count = read(*sigchld_fd, &si, sizeof(si)); if (count == -1) { if (errno == EAGAIN) return 0; TRACE_ERRNO("read(%i, %p, %zu) failed", *sigchld_fd, &si, sizeof(si)); return -1; } TRACE("signal received: signo=%i, code=%i, pid=%i", si.ssi_signo, si.ssi_code, si.ssi_pid); if (si.ssi_signo != SIGCHLD || si.ssi_code != CLD_EXITED || si.ssi_pid != pid) return 0; if (reset_fd(sigchld_fd) == -1) return -1; if (reset_fd(stdin_fd) == -1) return -1; return 0; }
static int e_hfat_close (int fd) { int ret; F_FILE *fp; fp = fd_to_file (fd); ret = f_close (fp); reset_fd (fd); return hfat_to_efs_err (ret); }