From: Lennart Poettering Date: Wed, 6 Dec 2017 04:19:03 +0000 (+0100) Subject: mount-util: shorten the loop a bit (#7545) X-Git-Tag: v236~60 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93719c6b0e96dd59e2c1fcb40b5259f055841803;p=thirdparty%2Fsystemd.git mount-util: shorten the loop a bit (#7545) 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...) --- diff --git a/src/basic/mount-util.c b/src/basic/mount-util.c index 7f8b53f2b54..f8d615dd890 100644 --- a/src/basic/mount-util.c +++ b/src/basic/mount-util.c @@ -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); } }