Repair recently broken cfg_has_section().
authorJustin Pettit <jpettit@nicira.com>
Mon, 9 Mar 2009 01:07:46 +0000 (18:07 -0700)
committerJustin Pettit <jpettit@nicira.com>
Mon, 9 Mar 2009 01:07:46 +0000 (18:07 -0700)
lib/cfg.c

index 6ad620215b9f2d8a14ac3969f2d26df20c8e43f5..00d355efddca132af7374f49253771d20fc8b78e 100644 (file)
--- a/lib/cfg.c
+++ b/lib/cfg.c
@@ -47,7 +47,7 @@
 /* XXX This file really needs a unit test!  For a while, cfg_get_string(0,
  * "bridge.a.controller") would return the value of
  * "bridge.a.controller.in-band", if it existed, and I'm really not certain
- * that the fix didn't break other things (e.g. cfg_has_section()). */
+ * that the fix didn't break other things. */
 
 /* List of configuration files. */
 static struct svec cfg_files = SVEC_EMPTY_INITIALIZER;
@@ -197,7 +197,7 @@ bool
 cfg_has_section(const char *section_, ...)
 {
     struct ds section;
-    bool retval;
+    bool retval = false;
     va_list args;
     char **p;
 
@@ -207,8 +207,12 @@ cfg_has_section(const char *section_, ...)
     ds_put_char(&section, '.');
     va_end(args);
 
-    p = find_key_le(ds_cstr(&section));
-    retval = *p && !strncmp(section.string, *p, section.length);
+    for (p = cfg.names; *p; p++) { /* XXX this is inefficient */
+        if (!strncmp(section.string, *p, section.length)) {
+            retval = true;
+            break;
+        }
+    }
 
     ds_destroy(&section);
     return retval;