From 6d9b2b59b5f6679c5ed16cc06ed24d432838c8dc Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Tue, 13 Jul 2010 12:00:58 -0700 Subject: [PATCH] preproc: add %ifenv Add %ifenv to test for the presence of an environment variable. The environment variable can, but does not have to be, prefixed with %!. Signed-off-by: H. Peter Anvin --- pptok.dat | 3 ++- preproc.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pptok.dat b/pptok.dat index 76ca3609..b78d138a 100644 --- a/pptok.dat +++ b/pptok.dat @@ -1,6 +1,6 @@ ## -------------------------------------------------------------------------- ## -## Copyright 1996-2009 The NASM Authors - All Rights Reserved +## Copyright 1996-2010 The NASM Authors - All Rights Reserved ## See the file AUTHORS included with the NASM distribution for ## the specific copyright holders. ## @@ -39,6 +39,7 @@ *ctx *def *empty +*env *id *idn *idni diff --git a/preproc.c b/preproc.c index cc5034f3..ba1acd55 100644 --- a/preproc.c +++ b/preproc.c @@ -1610,6 +1610,7 @@ static bool if_condition(Token * tline, enum preproc_token ct) struct tokenval tokval; expr *evalresult; enum pp_token_type needtype; + const char *p; origline = tline; @@ -1649,6 +1650,26 @@ static bool if_condition(Token * tline, enum preproc_token ct) } break; + case PPC_IFENV: + tline = expand_smacro(tline); + j = false; /* have we matched yet? */ + while (tline) { + skip_white_(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '!'))) { + error(ERR_NONFATAL, + "`%s' expects environment variable names", + pp_directives[ct]); + goto fail; + } + p = tline->type == TOK_ID ? tline->text : tline->text + 2; + if (getenv(p)) + j = true; + tline = tline->next; + } + break; + case PPC_IFIDN: case PPC_IFIDNI: tline = expand_smacro(tline); -- 2.11.4.GIT