diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2016-02-10 19:02:45 +0100 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2016-02-10 19:02:45 +0100 |
commit | 95d82b1fd953a01bc8dadd0c277b79de17b64797 (patch) | |
tree | b05216467166250fb017b9fc85ffc67f5d3214df | |
parent | cd7fa86f76bbcdde6bc96a238ad2db7f007fc586 (diff) | |
download | lr-95d82b1fd953a01bc8dadd0c277b79de17b64797.tar.gz lr-95d82b1fd953a01bc8dadd0c277b79de17b64797.tar.xz lr-95d82b1fd953a01bc8dadd0c277b79de17b64797.zip |
allow environment variables in place of string literals
avoids quoting... numeric values are safe to expand inline already.
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | lr.1 | 1 | ||||
-rw-r--r-- | lr.c | 17 |
3 files changed, 19 insertions, 0 deletions
diff --git a/README.md b/README.md index 1be1677..7057611 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,7 @@ Default: `n`. | =~~ -- case insensitive POSIX Extended Regular Expressions <str> ::= " ([^"] | "")+ " -- use "" for a single " inside " + | $[A-Za-z0-9_] -- environment variable <typetest> ::= type ( == | = | != ) ( b | c | d | p | f | l ) diff --git a/lr.1 b/lr.1 index d422344..3488a28 100644 --- a/lr.1 +++ b/lr.1 @@ -255,6 +255,7 @@ tests are given by the following EBNF: | =~~ -- case insensitive POSIX Extended Regular Expressions <str> ::= " ([^"] | "")+ " -- use "" for a single " inside " + | $[A-Za-z0-9_]+ -- environment variable <typetest> ::= type ( == | = | != ) ( b | c | d | p | f | l ) diff --git a/lr.c b/lr.c index a90b786..de451fa 100644 --- a/lr.c +++ b/lr.c @@ -396,6 +396,23 @@ parse_string(char **s) ws(); *s = buf ? buf : (char *) ""; return 1; + } else if (*pos == '$') { + char t; + char *e = ++pos; + + while (isalnum((unsigned char) *pos) || *pos == '_') + pos++; + if (e == pos) + parse_error("invalid environment variable name"); + + t = *pos; + *pos = 0; + *s = getenv(e); + if (!*s) + *s = (char *) ""; + *pos = t; + ws(); + return 1; } return 0; |