[libvirt] [PATCH 2/5] Simplify the loop in virCommandRunRegex

Ján Tomko jtomko at redhat.com
Tue Mar 25 07:17:49 UTC 2014


Do not check for border iterator values inside the loop,
move the code before/after the loop instead.
---
 src/util/vircommand.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/util/vircommand.c b/src/util/vircommand.c
index f1adb1e..c17792b 100644
--- a/src/util/vircommand.c
+++ b/src/util/vircommand.c
@@ -2840,13 +2840,11 @@ virCommandRunRegex(virCommandPtr cmd,
         if (!p)
             p = lines[k];
 
+        ngroup = 0;
         for (i = 0; i < nregex; i++) {
             if (regexec(&reg[i], p, nvars[i]+1, vars, 0) != 0)
                 break;
 
-            if (i == 0)
-                ngroup = 0;
-
             /* NULL terminate each captured group in the line */
             for (j = 0; j < nvars[i]; j++) {
                 /* NB vars[0] is the full pattern, so we offset j by 1 */
@@ -2855,16 +2853,14 @@ virCommandRunRegex(virCommandPtr cmd,
                     goto cleanup;
             }
 
-            /* We're matching on the last regex, so callback time */
-            if (i == (nregex-1)) {
-                if (((*func)(groups, data)) < 0)
-                    goto cleanup;
+        }
+        /* We've matched on the last regex, so callback time */
+        if (i == nregex) {
+            if (((*func)(groups, data)) < 0)
+                goto cleanup;
 
-                /* Release matches & restart to matching the first regex */
-                for (j = 0; j < totgroups; j++)
-                    VIR_FREE(groups[j]);
-                ngroup = 0;
-            }
+            for (j = 0; j < totgroups; j++)
+                VIR_FREE(groups[j]);
         }
     }
 
-- 
1.8.3.2




More information about the libvir-list mailing list