diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-12-15 23:09:12 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-12-17 10:02:35 +0100 |
commit | 31cab05faab92a2f0062b4833547083621d85678 (patch) | |
tree | d68c51ecf69f457654ad49ee805833407125d166 /cpp.c | |
parent | 52726714c29c3442d3675da4fe888d565988d5db (diff) |
cpp: Allow to pass additional cpp options
Extend cpp_exec function with args parameter to
specify additional cpp options (like -D).
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'cpp.c')
-rw-r--r-- | cpp.c | 39 |
1 files changed, 30 insertions, 9 deletions
@@ -5,25 +5,46 @@ #include "proc.h" #include "xmalloc.h" -int cpp_exec(char *in_file, char *out_file, size_t out_len) +static size_t argv_len(char **argv) { + size_t len = 0; + + for (; argv && *argv; argv++) + len++; + + return len; +} + +int cpp_exec(char *in_file, char *out_file, size_t out_len, char **argv) +{ + size_t argc = 7 + argv_len(argv); char *tmp = xstrdup(in_file); - char *argv[7] = { - "cpp", - "-I", ETCDIRE_STRING, - "-o", out_file, - in_file, - NULL, - }; + char **cpp_argv; int ret = 0; char *base; + unsigned int i = 0; base = basename(tmp); slprintf(out_file, out_len, "/tmp/.tmp-%u-%s", rand(), base); - if (proc_exec("cpp", argv)) + cpp_argv = xmalloc(argc * sizeof(char *)); + + cpp_argv[i++] = "cpp"; + + for (; argv && *argv; argv++, i++) + cpp_argv[i] = *argv; + + cpp_argv[i++] = "-I"; + cpp_argv[i++] = ETCDIRE_STRING; + cpp_argv[i++] = "-o"; + cpp_argv[i++] = out_file; + cpp_argv[i++] = in_file; + cpp_argv[i++] = NULL; + + if (proc_exec("cpp", cpp_argv)) ret = -1; + xfree(cpp_argv); xfree(tmp); return ret; } |