summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Kochan <vadim4j@gmail.com>2015-11-22 21:09:37 +0200
committerTobias Klauser <tklauser@distanz.ch>2015-11-24 10:24:01 +0100
commit8a8fd13d6dc2f99cc731657aaffcc1c7dcd975b3 (patch)
treeb62c2d62ed578106bfdfd335b5e64bfa621dccf5
parentab2bb70f5044e6e784071cf036a8d3db63d3e6eb (diff)
bpfc: Invoke C preprocessor from cpp.c module
Use cpp_exec func from cpp.c module to invoke C preprocessor. Signed-off-by: Vadim Kochan <vadim4j@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r--bpf_parser.y18
-rw-r--r--bpfc/Makefile1
2 files changed, 7 insertions, 12 deletions
diff --git a/bpf_parser.y b/bpf_parser.y
index 8c09639..8aed9dc 100644
--- a/bpf_parser.y
+++ b/bpf_parser.y
@@ -25,6 +25,7 @@
#include "bpf_parser.tab.h"
#include "built_in.h"
#include "die.h"
+#include "cpp.h"
int compile_filter(char *file, int verbose, int bypass, int format,
bool invoke_cpp);
@@ -744,20 +745,13 @@ int compile_filter(char *file, int verbose, int bypass, int format,
memset(tmp_file, 0, sizeof(tmp_file));
if (invoke_cpp) {
- char cmd[256], *dir, *base, *a, *b;
-
- dir = dirname((a = xstrdup(file)));
- base = basename((b = xstrdup(file)));
-
- slprintf(tmp_file, sizeof(tmp_file), "%s/.tmp-%u-%s", dir, rand(), base);
- slprintf(cmd, sizeof(cmd), "cpp -I" ETCDIRE_STRING " %s > %s",
- file, tmp_file);
- if (system(cmd) != 0)
- panic("Failed to invoke C preprocessor!\n");
+ ret = cpp_exec(file, tmp_file, sizeof(tmp_file));
+ if (ret) {
+ fprintf(stderr, "Failed to invoke C preprocessor!\n");
+ goto exit;
+ }
file = tmp_file;
- xfree(a);
- xfree(b);
}
if (!strncmp("-", file, strlen("-")))
diff --git a/bpfc/Makefile b/bpfc/Makefile
index b687bd1..f011706 100644
--- a/bpfc/Makefile
+++ b/bpfc/Makefile
@@ -7,6 +7,7 @@ bpfc-objs = xmalloc.o \
bpf_parser.tab.o \
die.o \
sysctl.o \
+ cpp.o \
bpfc.o
bpfc-lex = bpf_lexer.yy.o