X-Git-Url: https://git.distorted.org.uk/~mdw/runlisp/blobdiff_plain/47af3df3850a1a17ee706b278868309d40bacd55..68f84445eae7a1267a0ef2592e3cb6725544a7cd:/lib.c diff --git a/lib.c b/lib.c index b509cea..c844997 100644 --- a/lib.c +++ b/lib.c @@ -1251,7 +1251,7 @@ void config_read_env(struct config *conf, struct config_section *sect) * * This only keeps track of the immutable parameters for the substitution * task: stuff which changes (flags, filtering state, cursor position) is - * maintained separately. + * maintained separately. */ struct subst { struct config *config; /* configuration state */ @@ -1384,7 +1384,8 @@ static const char *subst(const char *p, const char *l, * us which special characters we need to stop at. This way, we can use * `strcspn' to skip over literal text and stop at the next character which * needs special handling. Entries in this table with a null pointer - * correspond to impossible flag settings. + * correspond to impossible flag settings: notably, `SF_QUOT' can only be + * set when `SF_SUBST' is also set. */ static const char *const delimtab[] = { @@ -1396,26 +1397,27 @@ static const char *subst(const char *p, const char *l, * `SF_QUOT' */ #define DELIM "|}" /* end delimiters of `SF_SUBEXPR' */ - ESCAPE, - ESCAPE WORDSEP, - 0, - ESCAPE QUOT, - ESCAPE SUBST, - ESCAPE SUBST WORDSEP, - 0, - ESCAPE SUBST QUOT, - ESCAPE DELIM, - ESCAPE DELIM WORDSEP, - 0, - ESCAPE DELIM QUOT, - ESCAPE DELIM SUBST, - ESCAPE DELIM SUBST WORDSEP, - 0, - ESCAPE DELIM SUBST QUOT - -#undef COMMON + ESCAPE, /* --- */ + ESCAPE WORDSEP, /* SPLIT */ + 0, /* QUOT */ + ESCAPE QUOT, /* SPLIT | QUOT */ + ESCAPE SUBST, /* SUBST */ + ESCAPE SUBST WORDSEP, /* SPLIT | SUBST */ + 0, /* QUOT | SUBST */ + ESCAPE SUBST QUOT, /* SPLIT | QUOT | SUBST */ + ESCAPE DELIM, /* SUBEXPR */ + ESCAPE DELIM WORDSEP, /* SPLIT | SUBEXPR */ + 0, /* QUOT | SUBEXPR */ + ESCAPE DELIM QUOT, /* SPLIT | QUOT | SUBEXPR */ + ESCAPE DELIM SUBST, /* SUBST | SUBEXPR */ + ESCAPE DELIM SUBST WORDSEP, /* SPLIT | SUBST | SUBEXPR */ + 0, /* QUOT | SUBST | SUBEXPR */ + ESCAPE DELIM SUBST QUOT /* SPLIT | QUOT | SUBST | SUBEXPR */ + +#undef ESCAPE +#undef SUBST #undef WORDSEP -#undef SQUOT +#undef QUOT #undef DELIM }; @@ -1461,7 +1463,7 @@ static const char *subst(const char *p, const char *l, if (!(f&SF_SKIP)) { - /* If this is a double quote or backslash then check DFLT to see if + /* If this is a double quote or backslash then check QFILT to see if * it needs escaping. */ if (qfilt && (*p == '"' || *p == '\\'))