diff --git a/format.c b/format.c index 8f74c415..56292556 100644 --- a/format.c +++ b/format.c @@ -323,6 +323,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); @@ -348,9 +349,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); } /* @@ -372,7 +382,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 '=':