diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c
index 7e1cd02..47c678e 100644 (file)
--- a/src/util/virbitmap.c
+++ b/src/util/virbitmap.c
@@ -297,7 +297,6 @@ virBitmapParse(const char *str,
                virBitmapPtr *bitmap,
                size_t bitmapSize)
 {
-    int ret = 0;
     bool neg = false;
     const char *cur;
     char *tmp;
@@ -330,12 +329,12 @@ virBitmapParse(const char *str,
         }
 
         if (!c_isdigit(*cur))
-            goto parse_error;
+            goto error;
 
         if (virStrToLong_i(cur, &tmp, 10, &start) < 0)
-            goto parse_error;
+            goto error;
         if (start < 0)
-            goto parse_error;
+            goto error;
 
         cur = tmp;
 
@@ -343,35 +342,29 @@ virBitmapParse(const char *str,
 
         if (*cur == ',' || *cur == 0 || *cur == terminator) {
             if (neg) {
-                if (virBitmapIsSet(*bitmap, start)) {
-                    ignore_value(virBitmapClearBit(*bitmap, start));
-                    ret--;
-                }
+                if (virBitmapClearBit(*bitmap, start) < 0)
+                    goto error;
             } else {
-                if (!virBitmapIsSet(*bitmap, start)) {
-                    ignore_value(virBitmapSetBit(*bitmap, start));
-                    ret++;
-                }
+                if (virBitmapSetBit(*bitmap, start) < 0)
+                    goto error;
             }
         } else if (*cur == '-') {
             if (neg)
-                goto parse_error;
+                goto error;
 
             cur++;
             virSkipSpaces(&cur);
 
             if (virStrToLong_i(cur, &tmp, 10, &last) < 0)
-                goto parse_error;
+                goto error;
             if (last < start)
-                goto parse_error;
+                goto error;
 
             cur = tmp;
 
             for (i = start; i <= last; i++) {
-                if (!virBitmapIsSet(*bitmap, i)) {
-                    ignore_value(virBitmapSetBit(*bitmap, i));
-                    ret++;
-                }
+                if (virBitmapSetBit(*bitmap, i) < 0)
+                    goto error;
             }
 
             virSkipSpaces(&cur);
@@ -384,14 +377,13 @@ virBitmapParse(const char *str,
         } else if (*cur == 0 || *cur == terminator) {
             break;
         } else {
-            goto parse_error;
+            goto error;
         }
     }
 
-    sa_assert(ret >= 0);
-    return ret;
+    return virBitmapCountBits(*bitmap);
 
-parse_error:
+error:
     virBitmapFree(*bitmap);
     *bitmap = NULL;
     return -1;