Working on handling of -U
This commit is contained in:
parent
8fbb692fd9
commit
c64bbfda5c
37
src/main.c
37
src/main.c
|
@ -13,6 +13,8 @@
|
||||||
* You should have received a copy of the Creative Commons Attribution-
|
* You should have received a copy of the Creative Commons Attribution-
|
||||||
* NonCommercial-ShareAlike 3.0 along with cpp; if not, browse to
|
* NonCommercial-ShareAlike 3.0 along with cpp; if not, browse to
|
||||||
* http://creativecommons.org/licenses/by-nc-sa/3.0/ */
|
* http://creativecommons.org/licenses/by-nc-sa/3.0/ */
|
||||||
|
/* FIXME:
|
||||||
|
* - remove -t? (parse trigraphs by default) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +38,8 @@ typedef struct _Prefs
|
||||||
size_t paths_cnt;
|
size_t paths_cnt;
|
||||||
const char ** defines;
|
const char ** defines;
|
||||||
size_t defines_cnt;
|
size_t defines_cnt;
|
||||||
|
const char ** undefines;
|
||||||
|
size_t undefines_cnt;
|
||||||
} Prefs;
|
} Prefs;
|
||||||
#define PREFS_t 0x1
|
#define PREFS_t 0x1
|
||||||
|
|
||||||
|
@ -74,6 +78,7 @@ static int _cpp_do(Prefs * prefs, FILE * fp, char const * filename)
|
||||||
Cpp * cpp;
|
Cpp * cpp;
|
||||||
size_t i;
|
size_t i;
|
||||||
size_t j;
|
size_t j;
|
||||||
|
size_t k;
|
||||||
Token * token;
|
Token * token;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
|
@ -86,7 +91,11 @@ static int _cpp_do(Prefs * prefs, FILE * fp, char const * filename)
|
||||||
for(j = 0; j < prefs->defines_cnt; j++)
|
for(j = 0; j < prefs->defines_cnt; j++)
|
||||||
if(cpp_define_add(cpp, prefs->defines[j], NULL) != 0)
|
if(cpp_define_add(cpp, prefs->defines[j], NULL) != 0)
|
||||||
break;
|
break;
|
||||||
if(i != prefs->paths_cnt || j != prefs->defines_cnt)
|
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;
|
||||||
|
@ -133,11 +142,12 @@ static int _cpp_error(void)
|
||||||
/* FIXME -E prints metadata? */
|
/* FIXME -E prints metadata? */
|
||||||
static int _usage(void)
|
static int _usage(void)
|
||||||
{
|
{
|
||||||
fputs("Usage: " PACKAGE " [-D name[=value]]...[-I directory][-o outfile][-t] input...\n"
|
fputs("Usage: " PACKAGE " [-D name[=value]]...[-I directory][-o outfile][-t][-U name]... input...\n"
|
||||||
" -D Add a substitution\n"
|
" -D Add a substitution\n"
|
||||||
" -I Add a directory to the search path\n"
|
" -I Add a directory to the search path\n"
|
||||||
" -o Write output to a file\n"
|
" -o Write output to a file\n"
|
||||||
" -t Convert trigraphs\n", stderr);
|
" -t Convert trigraphs\n"
|
||||||
|
" -U Remove a substitution\n", stderr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +155,7 @@ static int _usage(void)
|
||||||
/* main */
|
/* main */
|
||||||
static int _main_add_define(Prefs * name, char * define);
|
static int _main_add_define(Prefs * name, 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 const * undefine);
|
||||||
|
|
||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
|
@ -153,7 +164,7 @@ int main(int argc, char * argv[])
|
||||||
int o;
|
int o;
|
||||||
|
|
||||||
memset(&prefs, 0, sizeof(prefs));
|
memset(&prefs, 0, sizeof(prefs));
|
||||||
while((o = getopt(argc, argv, "D:I:o:t")) != -1)
|
while((o = getopt(argc, argv, "D:I:o:tU:")) != -1)
|
||||||
switch(o)
|
switch(o)
|
||||||
{
|
{
|
||||||
case 'D':
|
case 'D':
|
||||||
|
@ -170,6 +181,10 @@ int main(int argc, char * argv[])
|
||||||
case 't':
|
case 't':
|
||||||
prefs.flags |= PREFS_t;
|
prefs.flags |= PREFS_t;
|
||||||
break;
|
break;
|
||||||
|
case 'U':
|
||||||
|
if(_main_add_undefine(&prefs, optarg) != 0)
|
||||||
|
return 2;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return _usage();
|
return _usage();
|
||||||
}
|
}
|
||||||
|
@ -207,3 +222,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 const * undefine)
|
||||||
|
{
|
||||||
|
const 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