]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dissect-image: also store the image size in DissectedImage
authorLennart Poettering <lennart@poettering.net>
Mon, 4 Dec 2023 17:04:44 +0000 (18:04 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 13 Dec 2023 16:35:22 +0000 (17:35 +0100)
That way we can easily access it the same way regardless if we operate
on a block device or on a regular file.

src/shared/dissect-image.c
src/shared/dissect-image.h

index 5869843c42e3dc2080a7b842987468b6a73798f6..98690367a15386d47af1924bd3aed06b789d04ed 100644 (file)
@@ -1547,6 +1547,7 @@ int dissect_image_file(
 #if HAVE_BLKID
         _cleanup_(dissected_image_unrefp) DissectedImage *m = NULL;
         _cleanup_close_ int fd = -EBADF;
+        struct stat st;
         int r;
 
         assert(path);
@@ -1555,7 +1556,10 @@ int dissect_image_file(
         if (fd < 0)
                 return -errno;
 
-        r = fd_verify_regular(fd);
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        r = stat_verify_regular(&st);
         if (r < 0)
                 return r;
 
@@ -1563,6 +1567,8 @@ int dissect_image_file(
         if (r < 0)
                 return r;
 
+        m->image_size = st.st_size;
+
         r = probe_sector_size(fd, &m->sector_size);
         if (r < 0)
                 return r;
@@ -3699,6 +3705,7 @@ int dissect_loop_device(
                 return r;
 
         m->loop = loop_device_ref(loop);
+        m->image_size = m->loop->device_size;
         m->sector_size = m->loop->sector_size;
 
         r = dissect_image(m, loop->fd, loop->node, verity, mount_options, image_policy, flags);
index 15c0bf7219430cd69dc55696a63cf1eaeb0bcd6e..ed02049ed0c7190768a22c4e1a2cc3340f880658 100644 (file)
@@ -102,6 +102,7 @@ struct DissectedImage {
         DecryptedImage *decrypted_image;
 
         uint32_t sector_size;
+        uint64_t image_size;
 
         char *image_name;
         sd_id128_t image_uuid;