Files
aboba/gpp.c
2025-06-09 20:10:57 +02:00

44 lines
773 B
C

#include <sys/mman.h>
#include "gebs/gebs.h"
#include "gpp.h"
#include "baked.h"
int gpp_fd;
void gpp_init(void)
{
gpp_fd = memfd_create("gpp-binary", 0);
if (gpp_fd < 0) {
LOGE("Could not create gpp_fd. Aborting...");
abort();
}
write(gpp_fd, gpp1_data, gpp1_size);
}
void gpp_deinit(void)
{
close(gpp_fd);
}
bool gpp_run(char *path, NString_List *env, String_Builder *out)
{
Cmd cmd = {0};
defer { cmd_free(&cmd); }
cmd_append(&cmd, "gpp1");
cmd_append(&cmd, "-H");
cmd_append(&cmd, "-x");
cmd_append(&cmd, "--nostdinc");
cmd_append(&cmd, path);
for (size_t i = 0; i < env->count; i++) {
cmd_append(&cmd, env->items[i]);
}
return cmd_fd_run_collect(gpp_fd, &cmd, out) == 0;
}