about summary refs log tree commit diff
path: root/lr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-02-10 19:02:45 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-02-10 19:02:45 +0100
commit95d82b1fd953a01bc8dadd0c277b79de17b64797 (patch)
treeb05216467166250fb017b9fc85ffc67f5d3214df /lr.c
parentcd7fa86f76bbcdde6bc96a238ad2db7f007fc586 (diff)
downloadlr-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.
Diffstat (limited to 'lr.c')
-rw-r--r--lr.c17
1 files changed, 17 insertions, 0 deletions
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;