]> git.proxmox.com Git - mirror_lxc.git/commitdiff
utils: add has_fs_type() + is_fs_type()
authorChristian Brauner <christian.brauner@ubuntu.com>
Tue, 1 Aug 2017 21:23:24 +0000 (23:23 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Tue, 1 Aug 2017 23:37:02 +0000 (01:37 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c
src/lxc/utils.h

index f89c837d5bdc161d9efa029622b2c111d60c2424..88692035f4b58796e9c5ec33175e88d654d07fb8 100644 (file)
@@ -2384,3 +2384,25 @@ void *must_realloc(void *orig, size_t sz)
 
        return ret;
 }
+
+bool is_fs_type(const struct statfs *fs, fs_type_magic magic_val)
+{
+       return (fs->f_type == (fs_type_magic)magic_val);
+}
+
+bool has_fs_type(const char *path, fs_type_magic magic_val)
+{
+       bool has_type;
+       int ret;
+       struct statfs sb;
+
+       ret = statfs(path, &sb);
+       if (ret < 0)
+               return false;
+
+       has_type = is_fs_type(&sb, magic_val);
+       if (!has_type && magic_val == RAMFS_MAGIC)
+               WARN("When the ramfs it a tmpfs statfs() might report tmpfs");
+
+       return has_type;
+}
index 3465e6a6f2461066d4648acd49144b46692e454a..addfb7a054bc28ff652bac4b8e17680e77fdf317 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/loop.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
+#include <sys/vfs.h>
 
 #include "initutils.h"
 
@@ -386,4 +387,9 @@ char *must_copy_string(const char *entry);
 /* Re-alllocate a pointer, do not fail */
 void *must_realloc(void *orig, size_t sz);
 
+/* __typeof__ should be safe to use with all compilers. */
+typedef __typeof__(((struct statfs *)NULL)->f_type) fs_type_magic;
+bool has_fs_type(const char *path, fs_type_magic magic_val);
+bool is_fs_type(const struct statfs *fs, fs_type_magic magic_val);
+
 #endif /* __LXC_UTILS_H */