From 373d1fe7a98102adb38374278b77c4c89a2ea7fb Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 29 Feb 2008 16:35:00 +0000 Subject: [PATCH] Implemented -I --- src/c99.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/c99.c b/src/c99.c index e0c086c..46f2d9f 100644 --- a/src/c99.c +++ b/src/c99.c @@ -31,6 +31,8 @@ typedef struct _Prefs { int flags; char const * outfile; + const char ** paths; + size_t paths_cnt; } Prefs; #define PREFS_c 0x1 #define PREFS_E 0x2 @@ -129,11 +131,20 @@ static int _c99_do_E(Prefs * prefs, FILE * outfp, char const * infile, { int ret; Cpp * cpp; + size_t i; Token * token; int code; if((cpp = cpp_new(infile, CPP_FILTER_TRIGRAPH)) == NULL) return 1; + for(i = 0; i < prefs->paths_cnt; i++) + if(cpp_add_path(cpp, prefs->paths[i]) != 0) + break; + if(i != prefs->paths_cnt) + { + cpp_delete(cpp); + return 1; + } while((ret = cpp_scan(cpp, &token)) == 0 && token != NULL) { @@ -173,6 +184,8 @@ static int _usage(void) /* public */ /* main */ +static int _main_add_path(Prefs * prefs, char const * path); + int main(int argc, char * argv[]) { Prefs prefs; @@ -188,6 +201,10 @@ int main(int argc, char * argv[]) case 'E': prefs.flags |= PREFS_E; break; + case 'I': + if(_main_add_path(&prefs, optarg) != 0) + return 2; + break; case 'g': prefs.flags |= PREFS_g; break; @@ -206,3 +223,15 @@ int main(int argc, char * argv[]) return _usage(); return _c99(&prefs, argc - optind, &argv[optind]) == 0 ? 0 : 2; } + +static int _main_add_path(Prefs * prefs, char const * path) +{ + const char ** p; + + if((p = realloc(prefs->paths, sizeof(*p) * (prefs->paths_cnt + 1))) + == NULL) + return error_set_print(PACKAGE, 1, "%s", strerror(errno)); + prefs->paths = p; + prefs->paths[prefs->paths_cnt++] = path; + return 0; +}