* Inheritance cycles and ambiguous inheritance are diagnosed as fatal
* errors.
*/
-struct config_var *search_recursive(struct config *conf,
- struct config_section *sect,
- const char *name, size_t sz)
+static struct config_var *search_recursive(struct config *conf,
+ struct config_section *sect,
+ const char *name, size_t sz)
{
struct config_cache_entry *cache;
struct treap_path path;
* 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[] = {
* `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
};
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 == '\\'))