]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
uid-range: sort uid range entries in uid_range_coalesce()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Sep 2022 01:20:55 +0000 (10:20 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Sep 2022 11:49:55 +0000 (20:49 +0900)
As the logic in uid_range_coalesce() assumes the array of entries are
already sorted.
No functional changes, just refactoring.

src/basic/uid-range.c

index f7a9a070c72305e77191bf3e27343b7284d74225..2f16bb8916caf152fb14e14a112249d89baa9a1d 100644 (file)
@@ -22,10 +22,28 @@ static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
                 range->start + range->nr >= start;
 }
 
+static int uid_range_compare(const UidRange *a, const UidRange *b) {
+        int r;
+
+        assert(a);
+        assert(b);
+
+        r = CMP(a->start, b->start);
+        if (r != 0)
+                return r;
+
+        return CMP(a->nr, b->nr);
+}
+
 static void uid_range_coalesce(UidRange **p, size_t *n) {
         assert(p);
         assert(n);
 
+        if (*n <= 1)
+                return;
+
+        typesafe_qsort(*p, *n, uid_range_compare);
+
         for (size_t i = 0; i < *n; i++) {
                 for (size_t j = i + 1; j < *n; j++) {
                         UidRange *x = (*p)+i, *y = (*p)+j;
@@ -49,16 +67,6 @@ static void uid_range_coalesce(UidRange **p, size_t *n) {
         }
 }
 
-static int uid_range_compare(const UidRange *a, const UidRange *b) {
-        int r;
-
-        r = CMP(a->start, b->start);
-        if (r != 0)
-                return r;
-
-        return CMP(a->nr, b->nr);
-}
-
 int uid_range_add(UidRange **p, size_t *n, uid_t start, uid_t nr) {
         bool found = false;
         UidRange *x;
@@ -102,7 +110,6 @@ int uid_range_add(UidRange **p, size_t *n, uid_t start, uid_t nr) {
                 x->nr = nr;
         }
 
-        typesafe_qsort(*p, *n, uid_range_compare);
         uid_range_coalesce(p, n);
 
         return *n;