On Wed, Mar 20, 2024 at 10:19:13 +0100, Andrea Bolognani wrote:
> If the filesystem wasn't determined to be a shared one via the
> type check, try comparing it with the additional paths that
> have been configured by the local admin.
>
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>
> ---
> src/util/virfile.c | 86 ++++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 72 insertions(+), 14 deletions(-)
>
> diff --git a/src/util/virfile.c b/src/util/virfile.c
> index a6a7de9829..ac9b5a77a6 100644
> --- a/src/util/virfile.c
> +++ b/src/util/virfile.c
> @@ -3795,22 +3795,80 @@ virFileGetDefaultHugepage(virHugeTLBFS *fs,
> return NULL;
> }
>
> +static int
> +virFileIsSharedFSOverrideCompare(const char *path,
> + char *const *overrides)
> +{
> + char *const *iter = overrides;
> +
> + while (*iter != NULL) {
> + if (STREQ(path, *iter))
> + return 1;
> + iter++;
This is g_strv_contains in disguise.
> + }
> +
> + return 0;
> +}
> +
> +static int
> +virFileIsSharedFSOverride(const char *path,
> + char *const *overrides)
> +{
> + g_autofree char *dirpath = NULL;
> + char *p = NULL;
> + int ret = 0;
> +
> + if (!path || path[0] != '/' || !overrides)
> + return ret;
Return 0 directly.
> +
> + dirpath = g_strdup(path);
> +
> + ret = virFileIsSharedFSOverrideCompare(dirpath, overrides);
Same here, return success directly rather than having the reader look
what's happening.
> +
> + /* Continue until we've scanned the entire path or found a match */
> + while (p != dirpath && ret == 0) {
> +
> + /* Find the last slash */
> + if ((p = strrchr(dirpath, '/')) == NULL)
> + break;
> +
> + /* Truncate the path by overwriting the slash that we've just
> + * found with a null byte. If it is the very first slash in
> + * the path, we need to handle things slightly differently */
> + if (p == dirpath)
> + *(p+1) = '\0';
> + else
> + *p = '\0';
> +
> + ret = virFileIsSharedFSOverrideCompare(dirpath, overrides);
Here too.
> + }
> +
> + return ret;
And return failure/negative answer here also directly. Also consider
returning boolean as it's returning just 1 and 0, which would make the
first question I had (What do the return values mean?!?!) auto-answered.
> +}
> +
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org