Working on defines
This commit is contained in:
parent
373d1fe7a9
commit
c60e0f9f4a
56
src/c99.c
56
src/c99.c
@ -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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user