cfg: New function cfg_get_matches().
authorBen Pfaff <blp@nicira.com>
Thu, 16 Jul 2009 22:07:05 +0000 (15:07 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 16 Jul 2009 22:07:05 +0000 (15:07 -0700)
lib/cfg.c
lib/cfg.h

index a53e6e3..433d7a0 100644 (file)
--- 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
index f548de2..42345f8 100644 (file)
--- 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);