trafgen: Added option to pass macro/define for C preprocessor
[netsniff-ng.git] / cpp.c
blob8e03209604f61468a33a50c1d7315be723a2e9a8
1 #include <stdio.h>
2 #include <libgen.h>
4 #include "str.h"
5 #include "proc.h"
6 #include "xmalloc.h"
8 static size_t argv_len(char **argv)
10 size_t len = 0;
12 for (; argv && *argv; argv++)
13 len++;
15 return len;
18 int cpp_exec(char *in_file, char *out_file, size_t out_len, char **argv)
20 size_t argc = 7 + argv_len(argv);
21 char *tmp = xstrdup(in_file);
22 char **cpp_argv;
23 int ret = 0;
24 char *base;
25 unsigned int i = 0;
27 base = basename(tmp);
28 slprintf(out_file, out_len, "/tmp/.tmp-%u-%s", rand(), base);
30 cpp_argv = xmalloc(argc * sizeof(char *));
32 cpp_argv[i++] = "cpp";
34 for (; argv && *argv; argv++, i++)
35 cpp_argv[i] = *argv;
37 cpp_argv[i++] = "-I";
38 cpp_argv[i++] = ETCDIRE_STRING;
39 cpp_argv[i++] = "-o";
40 cpp_argv[i++] = out_file;
41 cpp_argv[i++] = in_file;
42 cpp_argv[i++] = NULL;
44 if (proc_exec("cpp", cpp_argv))
45 ret = -1;
47 xfree(cpp_argv);
48 xfree(tmp);
49 return ret;