Working on defines

This commit is contained in:
Pierre Pronchery 2008-03-02 01:43:43 +00:00
parent 373d1fe7a9
commit c60e0f9f4a

View File

@ -33,6 +33,10 @@ typedef struct _Prefs
char const * outfile;
const char ** paths;
size_t paths_cnt;
char ** defines;
size_t defines_cnt;
char ** undefines;
size_t undefines_cnt;
} Prefs;
#define PREFS_c 0x1
#define PREFS_E 0x2
@ -132,15 +136,24 @@ static int _c99_do_E(Prefs * prefs, FILE * outfp, char const * infile,
int ret;
Cpp * cpp;
size_t i;
size_t j;
size_t k;
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)
if(cpp_path_add(cpp, prefs->paths[i]) != 0)
break;
if(i != prefs->paths_cnt)
for(j = 0; j < prefs->defines_cnt; j++)
if(cpp_define_add(cpp, prefs->defines[j], NULL) != 0)
break;
for(k = 0; k < prefs->undefines_cnt; k++)
if(cpp_define_remove(cpp, prefs->undefines[k]) != 0)
break;
if(i != prefs->paths_cnt || j != prefs->defines_cnt
|| k != prefs->undefines_cnt)
{
cpp_delete(cpp);
return 1;
@ -184,7 +197,9 @@ static int _usage(void)
/* public */
/* main */
static int _main_add_define(Prefs * prefs, char * define);
static int _main_add_path(Prefs * prefs, char const * path);
static int _main_add_undefine(Prefs * prefs, char * undefine);
int main(int argc, char * argv[])
{
@ -198,6 +213,10 @@ int main(int argc, char * argv[])
case 'c':
prefs.flags |= PREFS_c;
break;
case 'D':
if(_main_add_define(&prefs, optarg) != 0)
return 2;
break;
case 'E':
prefs.flags |= PREFS_E;
break;
@ -214,6 +233,9 @@ int main(int argc, char * argv[])
case 's':
prefs.flags |= PREFS_s;
break;
case 'U':
if(_main_add_undefine(&prefs, optarg) != 0)
return 2;
default:
return _usage();
}
@ -224,6 +246,22 @@ int main(int argc, char * argv[])
return _c99(&prefs, argc - optind, &argv[optind]) == 0 ? 0 : 2;
}
static int _main_add_define(Prefs * prefs, char * define)
{
char ** p;
char * value;
if(strlen(define) == 0)
return 1;
value = strtok(define, "=");
if((p = realloc(prefs->defines, sizeof(*p) * (prefs->defines_cnt + 1)))
== NULL)
return error_set_print(PACKAGE, 1, "%s", strerror(errno));
prefs->defines = p;
prefs->defines[prefs->defines_cnt++] = define;
return 0;
}
static int _main_add_path(Prefs * prefs, char const * path)
{
const char ** p;
@ -235,3 +273,17 @@ static int _main_add_path(Prefs * prefs, char const * path)
prefs->paths[prefs->paths_cnt++] = path;
return 0;
}
static int _main_add_undefine(Prefs * prefs, char * undefine)
{
char ** p;
if(strlen(undefine) == 0)
return 1;
if((p = realloc(prefs->undefines, sizeof(*p)
* (prefs->undefines_cnt + 1))) == NULL)
return error_set_print(PACKAGE, 1, "%s", strerror(errno));
prefs->undefines = p;
prefs->undefines[prefs->undefines_cnt++] = undefine;
return 0;
}