From d1f5142daba11baf77f7ec1753b5a660585e96f9 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 29 May 2018 09:10:30 +0000 Subject: [PATCH] If foo doesn't exist and can't be expanded in #{?foo,a,b} then assume it is false. --- format.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 7af09942..b8aa1606 100644 --- a/format.c +++ b/format.c @@ -1042,8 +1042,18 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, *ptr = '\0'; found = format_find(ft, copy + 1, modifiers); - if (found == NULL) + if (found == NULL) { + /* + * If the conditional not found, try to expand it. If + * the expansion doesn't have any effect, then assume + * false. + */ found = format_expand(ft, copy + 1); + if (strcmp(found, copy + 1) == 0) { + free(found); + found = xstrdup(""); + } + } if (format_choose(ptr + 1, &left, &right) != 0) goto fail; @@ -1098,8 +1108,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = new; } - /* Expand the buffer and copy in the value. */ done: + /* Expand the buffer and copy in the value. */ valuelen = strlen(value); while (*len - *off < valuelen + 1) { *buf = xreallocarray(*buf, 2, *len);