]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
os-util: add fd_is_os_tree() which is like path_is_os_tree() but operates on an fd
authorLennart Poettering <lennart@poettering.net>
Mon, 25 Aug 2025 09:17:40 +0000 (11:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 30 Oct 2025 21:56:19 +0000 (22:56 +0100)
src/basic/os-util.c
src/basic/os-util.h

index be845e2af7751ed3046e8e6bcedf9c4a944bc350..c04f86893ccedf28b3ff34f08805e238c8aec1e2 100644 (file)
@@ -114,6 +114,26 @@ int path_is_extension_tree(ImageClass image_class, const char *path, const char
         return 1;
 }
 
+int fd_is_os_tree(int fd) {
+        int r;
+
+        assert(fd >= 0);
+
+        r = open_extension_release_at(
+                        fd,
+                        IMAGE_MACHINE,
+                        /* extension= */ NULL,
+                        /* relax_extension_release_check= */ false,
+                        /* ret_path= */ NULL,
+                        /* ret_fd= */ NULL);
+        if (r == -ENOENT)
+                return false;
+        if (r < 0)
+                return r;
+
+        return true;
+}
+
 static int extension_release_strict_xattr_value(int extension_release_fd, const char *extension_release_dir_path, const char *filename) {
         int r;
 
index a3829b4f517fe1701ce4847499e6400bdfd3c9c2..79cbe25a49fdc80d9b2a91919dffac915634366f 100644 (file)
@@ -28,6 +28,7 @@ int path_is_extension_tree(ImageClass image_class, const char *path, const char
 static inline int path_is_os_tree(const char *path) {
         return path_is_extension_tree(_IMAGE_CLASS_INVALID, path, NULL, false);
 }
+int fd_is_os_tree(int fd);
 
 int open_extension_release(const char *root, ImageClass image_class, const char *extension, bool relax_extension_release_check, char **ret_path, int *ret_fd);
 int open_extension_release_at(int rfd, ImageClass image_class, const char *extension, bool relax_extension_release_check, char **ret_path, int *ret_fd);