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(®[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