diff options
author | nicm <nicm> | 2015-08-28 10:06:52 +0000 |
---|---|---|
committer | nicm <nicm> | 2015-08-28 10:06:52 +0000 |
commit | ee9f708500c2a6987b7a3c0aba2ac5e88812d8aa (patch) | |
tree | 9eae56839665961c45035df9790c3c92774aa184 /format.c | |
parent | 25faca41eb30bc7cba95da0103bfa6fdda4d9a8b (diff) |
Allow environment variables in #{}.
Diffstat (limited to 'format.c')
-rw-r--r-- | format.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -322,6 +322,7 @@ format_find(struct format_tree *ft, const char *key) { struct format_entry *fe, fe_find; struct options_entry *o; + struct environ_entry *envent; static char s[16]; o = options_find(&global_options, key); @@ -347,9 +348,18 @@ format_find(struct format_tree *ft, const char *key) fe_find.key = (char *) key; fe = RB_FIND(format_entry_tree, &ft->tree, &fe_find); - if (fe == NULL) - return (NULL); - return (fe->value); + if (fe != NULL) + return (fe->value); + + envent = NULL; + if (ft->s != NULL) + envent = environ_find(&ft->s->environ, key); + if (envent == NULL) + envent = environ_find(&global_environ, key); + if (envent != NULL) + return (envent->value); + + return (NULL); } /* @@ -371,7 +381,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, copy[keylen] = '\0'; /* Is there a length limit or whatnot? */ - if (!islower((u_char) *copy) && *copy != '@' && *copy != '?') { + if (!isalpha((u_char) *copy) && *copy != '@' && *copy != '?') { while (*copy != ':' && *copy != '\0') { switch (*copy) { case '=': |