/* See LICENSE file for copyright and license details. */ #include "common.h" #ifndef TEST int libexec_add_output_document(struct libexec_command *cmd, int fd, struct libexec_document *doc, int flags) { int fd_flags, fl_flags, fds[2]; if (!cmd || fd < 0 || !doc) { errno = EINVAL; return -1; } fd_flags = (flags & O_CLOEXEC); fl_flags = (flags ^ fd_flags); if (fd_flags) fd_flags = FD_CLOEXEC; if (pipe(fds)) return -1; if (fd_flags && fcntl(fds[0], F_SETFD, fd_flags)) goto fail; if (fl_flags && fcntl(fds[0], F_SETFL, fl_flags)) goto fail; doc->fd = fds[0]; if (libexec_dup(cmd, fd, fds[1])) goto fail; cmd->plumings[cmd->nplumings - 1].type = LIBEXEC_PLUMING_PIPE; return 0; fail: close(fds[0]); close(fds[1]); return -1; } #else LIBEXEC_CONST__ int main(void) {return 0;} /* TODO test */ #endif