From bd220b9b14df46628e28fbd3643fe5625d3c3188 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 7 Apr 2018 11:17:28 -0400 Subject: [PATCH] Parse after preprocessing --- src/main.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index 3c24729..ce0f85e 100644 --- a/src/main.c +++ b/src/main.c @@ -4,15 +4,25 @@ #include #include #include +#include -void preprocess(const char * input_fname) +static char preprocessed_fname[] = "/tmp/cxlppXXXXXX"; +static bool preprocessed_fname_created = false; + +bool preprocess(const char * input_fname) { - char fname[] = "/tmp/cxlppXXXXXX"; - int fd = mkstemp(fname); + int fd = mkstemp(preprocessed_fname); + if (fd < 0) + { + perror("mkstemp"); + return false; + } + preprocessed_fname_created = true; pid_t pid = fork(); if (pid < 0) { perror("fork"); + return false; } else if (pid == 0) { @@ -24,13 +34,22 @@ void preprocess(const char * input_fname) { close(fd); waitpid(pid, NULL, 0); - unlink(fname); } + return true; } int main(int argc, char * argv[]) { - preprocess(argv[1]); + bool preprocess_successful = preprocess(argv[1]); + if (preprocess_successful) + { + parse(preprocessed_fname); + } + /* Clean up temporary files. */ + if (preprocessed_fname_created) + { + unlink(preprocessed_fname); + } return 0; }