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(a)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.
+}
+