pkin/pkin/pkin_internal/pkin__spawn.c
2026-09-04 19:59:24 +02:00

43 lines
873 B
C

#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <libowfat/errmsg.h>
#include <libowfat/buffer.h>
static void carpsysargs(char *args[])
{
buffer_puts(buffer_2, "failed to exec");
while (*args) {
buffer_puts(buffer_2, " \'");
buffer_puts(buffer_2, *args);
buffer_puts(buffer_2, "'");
args++;
}
buffer_puts(buffer_2, ": ");
buffer_puts(buffer_2, strerror(errno));
buffer_puts(buffer_2, "\n");
buffer_flush(buffer_2);
}
pid_t pkin__spawn(char *args[], int infd, int outfd, int errfd)
{
pid_t pid = fork();
switch (pid) {
case -1: carpsys("fork: "); return -1;
case 0:
// TODO pipe
if (dup2(0, infd)<0
|| dup2(1, outfd)<0
|| dup2(2, errfd)<0
) {
carpsys("dup2");
return -1;
}
execvp(args[0], args);
carpsysargs(args);
return -1;
default:
return pid;
}
}