summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Kochan <vadim4j@gmail.com>2015-11-22 21:09:36 +0200
committerTobias Klauser <tklauser@distanz.ch>2015-11-24 10:21:47 +0100
commitab2bb70f5044e6e784071cf036a8d3db63d3e6eb (patch)
tree2beb14e7c52a4deaa03a8d52c3a8ecb59e8d34f3
parent697a000d5d8e7b329f9cd71f3ffd391297b78859 (diff)
cpp: Add cpp.c module to invoke C preprocessor
Add cpp_exec func to invoke C preprocessor which allow to change the logic in one place only. Signed-off-by: Vadim Kochan <vadim4j@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r--cpp.c27
-rw-r--r--cpp.h6
2 files changed, 33 insertions, 0 deletions
diff --git a/cpp.c b/cpp.c
new file mode 100644
index 0000000..8448252
--- /dev/null
+++ b/cpp.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <libgen.h>
+
+#include "str.h"
+#include "xmalloc.h"
+
+int cpp_exec(char *in_file, char *out_file, size_t out_len)
+{
+ char cmd[256], *dir, *base;
+ char *a = xstrdup(in_file);
+ char *b = xstrdup(in_file);
+ int ret = 0;
+
+ dir = dirname(a);
+ base = basename(b);
+
+ slprintf(out_file, out_len, "%s/.tmp-%u-%s", dir, rand(), base);
+ slprintf(cmd, sizeof(cmd), "cpp -I" ETCDIRE_STRING " %s > %s",
+ in_file, out_file);
+
+ if (system(cmd) != 0)
+ ret = -1;
+
+ xfree(a);
+ xfree(b);
+ return ret;
+}
diff --git a/cpp.h b/cpp.h
new file mode 100644
index 0000000..a3e295d
--- /dev/null
+++ b/cpp.h
@@ -0,0 +1,6 @@
+#ifndef CPP_H
+#define CPP_H
+
+extern int cpp_exec(char *in_file, char *out_file, size_t out_len);
+
+#endif