From 2d4ca16db8ccd244d4c90e5ddcc7b69b0e1757df Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Mon, 11 Oct 2021 22:31:38 +0100 Subject: [PATCH] buf.c: handle variables with curly braces In buf_expand_shell_variables(), corrently resolve ${foo} rather than just $foo --- src/common/buf.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/common/buf.c b/src/common/buf.c index 01070908..a3a450d4 100644 --- a/src/common/buf.c +++ b/src/common/buf.c @@ -1,6 +1,19 @@ #include #include "common/buf.h" + +static void +strip_curly_braces(char *s) +{ + size_t len = strlen(s); + if (s[0] != '{' || s[len - 1] != '}') { + return; + } + len -= 2; + memcpy(s, s + 1, len); + s[len] = 0; +} + void buf_expand_shell_variables(struct buf *s) { @@ -15,15 +28,16 @@ buf_expand_shell_variables(struct buf *s) environment_variable.len = 0; buf_add(&environment_variable, s->buf + i + 1); char *p = environment_variable.buf; - while (isalnum(*p)) { + while (isalnum(*p) || *p == '{' || *p == '}') { ++p; } *p = '\0'; + i += strlen(environment_variable.buf); + strip_curly_braces(environment_variable.buf); p = getenv(environment_variable.buf); if (p) { buf_add(&new, p); } - i += strlen(environment_variable.buf); } else if (s->buf[i] == '~') { /* expand tilde */ buf_add(&new, getenv("HOME"));