]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mount-util: shorten the loop a bit (#7545)
authorLennart Poettering <lennart@poettering.net>
Wed, 6 Dec 2017 04:19:03 +0000 (05:19 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 6 Dec 2017 04:19:03 +0000 (13:19 +0900)
The loop preparation and part of the loop contents are actually the
same, let's merge this.

Also, it's so much fun tweaking around in the name_to_handle_at() code,
let's do more of it with this patch!

(This also adds two NULL assignments, that aren't strictly necessary.
However, I figured its safer to place them in there, just in case the
for() condition is changed later. After all the freeing of the handle
and the invalidation of the cleanup-controller pointer to it are
otherwise really far away from each other...)

src/basic/mount-util.c

index 7f8b53f2b54480eda70db514942d5367ba19f57b..f8d615dd890488cd07ac730598488cbdd1af2908 100644 (file)
@@ -55,7 +55,7 @@ int name_to_handle_at_loop(
                 int *ret_mnt_id,
                 int flags) {
 
-        _cleanup_free_ struct file_handle *h;
+        _cleanup_free_ struct file_handle *h = NULL;
         size_t n = ORIGINAL_MAX_HANDLE_SZ;
 
         /* We need to invoke name_to_handle_at() in a loop, given that it might return EOVERFLOW when the specified
@@ -65,15 +65,15 @@ int name_to_handle_at_loop(
          * This improves on raw name_to_handle_at() also in one other regard: ret_handle and ret_mnt_id can be passed
          * as NULL if there's no interest in either. */
 
-        h = malloc0(offsetof(struct file_handle, f_handle) + n);
-        if (!h)
-                return -ENOMEM;
-
-        h->handle_bytes = n;
-
         for (;;) {
                 int mnt_id = -1;
 
+                h = malloc0(offsetof(struct file_handle, f_handle) + n);
+                if (!h)
+                        return -ENOMEM;
+
+                h->handle_bytes = n;
+
                 if (name_to_handle_at(fd, path, h, &mnt_id, flags) >= 0) {
 
                         if (ret_handle) {
@@ -110,12 +110,7 @@ int name_to_handle_at_loop(
                 if (offsetof(struct file_handle, f_handle) + n < n) /* check for addition overflow */
                         return -EOVERFLOW;
 
-                free(h);
-                h = malloc0(offsetof(struct file_handle, f_handle) + n);
-                if (!h)
-                        return -ENOMEM;
-
-                h->handle_bytes = n;
+                h = mfree(h);
         }
 }