From 66152e8adad7b00935c0b5fbe0cf0a7df3c639c7 Mon Sep 17 00:00:00 2001 From: Bart Schaefer Date: Wed, 15 Dec 2010 04:05:50 +0000 Subject: 28530: replace (z+opts+) flag with (Z:opts:), add reserved (_:flags:). --- Src/subst.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'Src/subst.c') diff --git a/Src/subst.c b/Src/subst.c index 7ad4aecdf..24d515d06 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -1936,10 +1936,15 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) case 'z': shsplit = LEXFLAGS_ACTIVE; - if (s[1] == '+') { - s += 2; - while (*s && *s != '+' && *s != ')' && *s != Outpar) { - switch (*s++) { + break; + + case 'Z': + t = get_strarg(++s, &arglen); + if (*t) { + sav = *t; + *t = 0; + while (*++s) { + switch (*s) { case 'c': /* Parse and keep comments */ shsplit |= LEXFLAGS_COMMENTS_KEEP; @@ -1956,12 +1961,14 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) break; default: - goto flagerr; + *t = sav; + goto flagerr; } } - if (*s != '+') - goto flagerr; - } + *t = sav; + s = t + arglen - 1; + } else + goto flagerr; break; case 'u': @@ -1973,6 +1980,25 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) evalchar = 1; break; + case '_': + t = get_strarg(++s, &arglen); + if (*t) { + sav = *t; + *t = 0; + while (*++s) { + /* Reserved for future use */ + switch (*s) { + default: + *t = sav; + goto flagerr; + } + } + *t = sav; + s = t + arglen - 1; + } else + goto flagerr; + break; + default: flagerr: zerr("error in flags"); -- cgit 1.4.1