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