cfg: Avoid doing unnecessary work in cfg_del_match().
authorBen Pfaff <blp@nicira.com>
Tue, 7 Apr 2009 18:08:19 +0000 (11:08 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 7 Apr 2009 18:16:30 +0000 (11:16 -0700)
It is only necessary to compact and terminate the array if we actually
modified anything.

lib/cfg.c

index 8d9a4d0970e94b72653cb93f6b2e8ee763ad34ce..d588e6423881bfbe34adf403e103352c0f9354cb 100644 (file)
--- a/lib/cfg.c
+++ b/lib/cfg.c
@@ -545,6 +545,7 @@ cfg_del_section(const char *section_, ...)
 void
 cfg_del_match(const char *pattern_, ...)
 {
+    bool matched = false;
     char *pattern;
     char **p;
 
@@ -554,13 +555,16 @@ cfg_del_match(const char *pattern_, ...)
         if (!fnmatch(pattern, *p, 0)) {
             free(*p);
             *p = NULL;
+            matched = true;
         }
     }
-    svec_compact(&cfg);
-    svec_terminate(&cfg);
+    if (matched) {
+        svec_compact(&cfg);
+        svec_terminate(&cfg);
+        dirty = true;
+    }
 
     free(pattern);
-    dirty = true;
 }
 
 /* Fills 'svec' with all of the key-value pairs that have sections that