Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
}