diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-11-22 21:09:36 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-11-24 10:21:47 +0100 |
commit | ab2bb70f5044e6e784071cf036a8d3db63d3e6eb (patch) | |
tree | 2beb14e7c52a4deaa03a8d52c3a8ecb59e8d34f3 | |
parent | 697a000d5d8e7b329f9cd71f3ffd391297b78859 (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.c | 27 | ||||
-rw-r--r-- | cpp.h | 6 |
2 files changed, 33 insertions, 0 deletions
@@ -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; +} @@ -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 |