From: Yu Watanabe Date: Fri, 16 Sep 2022 01:29:56 +0000 (+0900) Subject: uid-range: escape from loop earlier X-Git-Tag: v252-rc1~178^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5739767dac70a97abee65e555bded55b1f38c03;p=thirdparty%2Fsystemd.git uid-range: escape from loop earlier The array of uid range entries are already sorted. Hence, if x and y are does not have intersection, then the remaining entries neither have intersection with x. --- diff --git a/src/basic/uid-range.c b/src/basic/uid-range.c index 2f16bb8916c..73dd4b28921 100644 --- a/src/basic/uid-range.c +++ b/src/basic/uid-range.c @@ -45,24 +45,26 @@ static void uid_range_coalesce(UidRange **p, size_t *n) { typesafe_qsort(*p, *n, uid_range_compare); for (size_t i = 0; i < *n; i++) { + UidRange *x = (*p) + i; + for (size_t j = i + 1; j < *n; j++) { - UidRange *x = (*p)+i, *y = (*p)+j; + UidRange *y = (*p)+j; + uid_t begin, end; - if (uid_range_intersect(x, y->start, y->nr)) { - uid_t begin, end; + if (!uid_range_intersect(x, y->start, y->nr)) + break; - begin = MIN(x->start, y->start); - end = MAX(x->start + x->nr, y->start + y->nr); + begin = MIN(x->start, y->start); + end = MAX(x->start + x->nr, y->start + y->nr); - x->start = begin; - x->nr = end - begin; + x->start = begin; + x->nr = end - begin; - if (*n > j+1) - memmove(y, y+1, sizeof(UidRange) * (*n - j -1)); + if (*n > j+1) + memmove(y, y+1, sizeof(UidRange) * (*n - j -1)); - (*n)--; - j--; - } + (*n)--; + j--; } } }