From 05d4bb1a3be2a161791fd4f156e7c5e69ac0daaf Mon Sep 17 00:00:00 2001 From: lum Date: Mon, 3 May 2021 13:28:03 +0000 Subject: [PATCH] When parsing a variable value within double quotes, allow parenthesis to be accomodated for. --- usr.bin/mg/interpreter.c | 70 +++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/usr.bin/mg/interpreter.c b/usr.bin/mg/interpreter.c index d958cb5107f..1b99318ab5e 100644 --- a/usr.bin/mg/interpreter.c +++ b/usr.bin/mg/interpreter.c @@ -1,4 +1,4 @@ -/* $OpenBSD: interpreter.c,v 1.23 2021/05/03 12:18:43 lum Exp $ */ +/* $OpenBSD: interpreter.c,v 1.24 2021/05/03 13:28:03 lum Exp $ */ /* * This file is in the public domain. * @@ -158,48 +158,52 @@ foundparen(char *funstr, int llen) if (*p == '\\') { esc = 1; } else if (*p == '(') { - if (inquote != 0) { + if (inquote == 0) { + if (begp != NULL) { + if (endp == NULL) + *p = '\0'; + else + *endp = '\0'; + + ret = parse(begp, lrp, &lp, blkid, + ++expctr); + if (!ret) { + cleanup(); + return(ret); + } + } + lrp = &lp; + begp = endp = NULL; + pctr++; + } else if (inquote != 1) { cleanup(); return(dobeep_msg("Opening and closing quote "\ "char error")); } - if (begp != NULL) { - if (endp == NULL) - *p = '\0'; - else - *endp = '\0'; - - ret = parse(begp, lrp, &lp, blkid, ++expctr); - if (!ret) { - cleanup(); - return(ret); - } - } - lrp = &lp; - begp = endp = NULL; - pctr++; esc = 0; } else if (*p == ')') { - if (inquote != 0) { + if (inquote == 0) { + if (begp != NULL) { + if (endp == NULL) + *p = '\0'; + else + *endp = '\0'; + + ret = parse(begp, lrp, &rp, blkid, + ++expctr); + if (!ret) { + cleanup(); + return(ret); + } + } + lrp = &rp; + begp = endp = NULL; + pctr--; + } else if (inquote != 1) { cleanup(); return(dobeep_msg("Opening and closing quote "\ "char error")); } - if (begp != NULL) { - if (endp == NULL) - *p = '\0'; - else - *endp = '\0'; - - ret = parse(begp, lrp, &rp, blkid, ++expctr); - if (!ret) { - cleanup(); - return(ret); - } - } - lrp = &rp; - begp = endp = NULL; - pctr--; esc = 0; } else if (*p != ' ' && *p != '\t') { if (begp == NULL) -- 2.20.1