Implemented -I

This commit is contained in:
Pierre Pronchery 2008-02-29 16:35:00 +00:00
parent f03da2e51b
commit 373d1fe7a9

View File

@ -31,6 +31,8 @@ typedef struct _Prefs
{ {
int flags; int flags;
char const * outfile; char const * outfile;
const char ** paths;
size_t paths_cnt;
} Prefs; } Prefs;
#define PREFS_c 0x1 #define PREFS_c 0x1
#define PREFS_E 0x2 #define PREFS_E 0x2
@ -129,11 +131,20 @@ static int _c99_do_E(Prefs * prefs, FILE * outfp, char const * infile,
{ {
int ret; int ret;
Cpp * cpp; Cpp * cpp;
size_t i;
Token * token; Token * token;
int code; int code;
if((cpp = cpp_new(infile, CPP_FILTER_TRIGRAPH)) == NULL) if((cpp = cpp_new(infile, CPP_FILTER_TRIGRAPH)) == NULL)
return 1; 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 while((ret = cpp_scan(cpp, &token)) == 0
&& token != NULL) && token != NULL)
{ {
@ -173,6 +184,8 @@ static int _usage(void)
/* public */ /* public */
/* main */ /* main */
static int _main_add_path(Prefs * prefs, char const * path);
int main(int argc, char * argv[]) int main(int argc, char * argv[])
{ {
Prefs prefs; Prefs prefs;
@ -188,6 +201,10 @@ int main(int argc, char * argv[])
case 'E': case 'E':
prefs.flags |= PREFS_E; prefs.flags |= PREFS_E;
break; break;
case 'I':
if(_main_add_path(&prefs, optarg) != 0)
return 2;
break;
case 'g': case 'g':
prefs.flags |= PREFS_g; prefs.flags |= PREFS_g;
break; break;
@ -206,3 +223,15 @@ int main(int argc, char * argv[])
return _usage(); return _usage();
return _c99(&prefs, argc - optind, &argv[optind]) == 0 ? 0 : 2; 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;
}