Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlaf Hering <ohering@suse.de>2019-08-01 16:19:02 +0200
committerOlaf Hering <ohering@suse.de>2019-08-01 16:19:02 +0200
commita3f33f8fff48e469a1ec36c8ff5d0faf711df076 (patch)
tree52a3bde8ed6b480e2545a3654e6b720e78a8c23d
parentedd72480ad7d1a3539938e72479e83f0ddfb81c1 (diff)
parent9d265c6a68d33faed452548d4b01c0616d3488c6 (diff)
Merge remote-tracking branch 'kerncvs/SLE15-SP1_EMBARGO' into SLE15-SP1-AZURE_EMBARGOrpm-4.12.14-8.13--sle15-sp1-updatesrpm-4.12.14-8.13
-rw-r--r--lib/bitmap.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/lib/bitmap.c b/lib/bitmap.c
index d99cb0a2ebab..5b476d8414be 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -516,7 +516,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
int nmaskbits)
{
unsigned int a, b, old_a, old_b;
- unsigned int group_size, used_size;
+ unsigned int group_size, used_size, off;
int c, old_c, totaldigits, ndigits;
const char __user __force *ubuf = (const char __user __force *)buf;
int at_start, in_range, in_partial_range;
@@ -602,6 +602,8 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
a = old_a;
b = old_b;
old_a = old_b = 0;
+ } else {
+ used_size = group_size = b - a + 1;
}
/* if no digit is after '-', it's wrong*/
if (at_start && in_range)
@@ -611,17 +613,9 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
if (b >= nmaskbits)
return -ERANGE;
while (a <= b) {
- if (in_partial_range) {
- static int pos_in_group = 1;
-
- if (pos_in_group <= used_size)
- set_bit(a, maskp);
-
- if (a == b || ++pos_in_group > group_size)
- pos_in_group = 1;
- } else
- set_bit(a, maskp);
- a++;
+ off = min(b - a + 1, used_size);
+ bitmap_set(maskp, a, off);
+ a += group_size;
}
} while (buflen && c == ',');
return 0;