From 867fb42cba19c25cfbe4f6752ebd3e44c29be2a1 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 16 Jul 2009 15:07:05 -0700 Subject: [PATCH] cfg: New function cfg_get_matches(). --- lib/cfg.c | 19 +++++++++++++++++++ lib/cfg.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/lib/cfg.c b/lib/cfg.c index a53e6e38..433d7a0f 100644 --- a/lib/cfg.c +++ b/lib/cfg.c @@ -676,6 +676,25 @@ cfg_del_match(const char *pattern_, ...) free(pattern); } +/* Fills 'svec' with all of the key-value pairs that match shell glob pattern + * 'pattern'. The caller must first initialize 'svec'. */ +void +cfg_get_matches(struct svec *svec, const char *pattern_, ...) +{ + char *pattern; + char **p; + + FORMAT_KEY(pattern_, pattern); + + for (p = cfg.names; *p; p++) { + if (!fnmatch(pattern, *p, 0)) { + svec_add(svec, *p); + } + } + + free(pattern); +} + /* Fills 'svec' with all of the key-value pairs that have sections that * begin with 'section'. The caller must first initialize 'svec'. */ void diff --git a/lib/cfg.h b/lib/cfg.h index f548de27..42345f86 100644 --- a/lib/cfg.h +++ b/lib/cfg.h @@ -63,6 +63,8 @@ void cfg_add_entry(const char *key, ...) PRINTF_FORMAT(1, 2); void cfg_del_entry(const char *key, ...) PRINTF_FORMAT(1, 2); void cfg_del_section(const char *key, ...) PRINTF_FORMAT(1, 2); void cfg_del_match(const char *pattern, ...) PRINTF_FORMAT(1, 2); +void cfg_get_matches(struct svec *svec, const char *pattern, ...) + PRINTF_FORMAT(2, 3); void cfg_get_section(struct svec *svec, const char *key, ...) PRINTF_FORMAT(2, 3); -- 2.30.2