+ char **arr = gather_args(cmd, ap);
+ pid_t ret;
+
+ if (!arr) {
+ errno = ENOMEM;
+ return -1;
+ }
+ ret = pipecmdarr(fd_fromchild, fd_tochild, fd_errfromchild, arr);
+ free_noerr(arr);
+ return ret;
+}
+
+pid_t pipecmdarr(int *fd_fromchild, int *fd_tochild, int *fd_errfromchild,
+ char *const *arr)
+{
+ int tochild[2], fromchild[2], errfromchild[2], execfail[2];