]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: iso9660: read block size from superblock
authorThomas Weißschuh <thomas@t-8ch.de>
Wed, 30 Nov 2022 03:17:19 +0000 (04:17 +0100)
committerThomas Weißschuh <thomas@t-8ch.de>
Thu, 15 Dec 2022 02:22:09 +0000 (02:22 +0000)
libblkid/src/superblocks/iso9660.c
tests/expected/blkid/low-probe-iso
tests/expected/blkid/low-probe-iso-different-iso-joliet-label
tests/expected/blkid/low-probe-iso-joliet
tests/expected/blkid/low-probe-iso-multi-genisoimage-0
tests/expected/blkid/low-probe-iso-multi-genisoimage-174
tests/expected/blkid/low-probe-iso-multi-genisoimage-348
tests/expected/blkid/low-probe-iso-rr-joliet
tests/expected/blkid/low-probe-iso-unicode-long-label

index 1172f9c259b127f6a86f8cff4c70f985be90b4c2..e67da9d70673508455d31571a4e0595a1557a888 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "superblocks.h"
 #include "cctype.h"
+#include "iso9660.h"
 
 struct iso9660_date {
        unsigned char year[4];
@@ -43,12 +44,14 @@ struct iso_volume_descriptor {
        unsigned char   unused[8];
        unsigned char   space_size[8];
        unsigned char   escape_sequences[8];
-       unsigned char  unused2[94];
+       unsigned char  unused2[32];
+       unsigned char  logical_block_size[4];
+       unsigned char  unused3[58];
        unsigned char  volume_set_id[128];
        unsigned char  publisher_id[128];
        unsigned char  data_preparer_id[128];
        unsigned char  application_id[128];
-       unsigned char  unused3[111];
+       unsigned char  unused4[111];
        struct iso9660_date created;
        struct iso9660_date modified;
 } __attribute__((packed));
@@ -253,8 +256,12 @@ static int probe_iso9660(blkid_probe pr, const struct blkid_idmag *mag)
        if (!pvd)
                return errno ? -errno : 1;
 
-       blkid_probe_set_fsblocksize(pr, ISO_SECTOR_SIZE);
-       blkid_probe_set_block_size(pr, ISO_SECTOR_SIZE);
+       uint16_t logical_block_size = isonum_723(pvd->logical_block_size, true);
+       uint32_t space_size = isonum_733(pvd->space_size, true);
+
+       blkid_probe_set_fsblocksize(pr, logical_block_size);
+       blkid_probe_set_block_size(pr, logical_block_size);
+       blkid_probe_set_fssize(pr, (uint64_t) space_size * logical_block_size);
 
        if (joliet && (len = merge_utf16be_ascii(buf, sizeof(buf), joliet->system_id, pvd->system_id, sizeof(pvd->system_id))) != 0)
                blkid_probe_set_utf8_id_label(pr, "SYSTEM_ID", buf, len, UL_ENCODE_UTF16BE);
index 3e9be8f985231c9c6bca0bcdf9d2b1fd5c1b4618..fcf6a342901437b4110377511f6fd0434419c81e 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=438272
 ID_FS_LABEL=IsoVolumeName
 ID_FS_LABEL_ENC=IsoVolumeName
 ID_FS_SYSTEM_ID=LINUX
index 34663a358147f593ac79088118a059b55c38587b..37fffabd95dd743742bf15285a59d9451e40c36b 100644 (file)
@@ -2,6 +2,7 @@ ID_FS_APPLICATION_ID=Joliet\x20Application
 ID_FS_BLOCK_SIZE=2048
 ID_FS_DATA_PREPARER_ID=Joliet\x20Preparer
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=1228800
 ID_FS_LABEL=Joliet_Label
 ID_FS_LABEL_ENC=Joliet\x20Label
 ID_FS_PUBLISHER_ID=Joliet\x20Publisher
index c92484a75b01a6e40c1deac91e906cb60a65e390..1cc8b65edd9cdb0800b3ab9261c77593779830ad 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=450560
 ID_FS_LABEL=ThisWonderfulLabelIsVeryVeryLong
 ID_FS_LABEL_ENC=ThisWonderfulLabelIsVeryVeryLong
 ID_FS_SYSTEM_ID=LINUX
index eed747e489c0c2b28543a2f016d98f0225d1d9cf..e022d7e963330e4c70b63563ed5005a59e60c989 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=356352
 ID_FS_LABEL=first_session
 ID_FS_LABEL_ENC=first\x20session
 ID_FS_SYSTEM_ID=LINUX
index aa71cff78f56b31ada675caabb843b5537af8eb8..44940e197cb8d98cf2adbe7807d313c15eefedaa 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=356352
 ID_FS_LABEL=second_session
 ID_FS_LABEL_ENC=second\x20session
 ID_FS_SYSTEM_ID=LINUX
index caf2010a5ed6a8ce063ee3c32d2bcba187f1c9b9..203f081f71d2c0d7dc7066245abf7da95e75c5a8 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=356352
 ID_FS_LABEL=third_session
 ID_FS_LABEL_ENC=third\x20session
 ID_FS_SYSTEM_ID=LINUX
index fdfc69616d53be47d55daa0608759f6f7b7b1a73..386fd76583142e821291d01f36b6832fd7e094f7 100644 (file)
@@ -1,6 +1,7 @@
 ID_FS_APPLICATION_ID=GENISOIMAGE\x20ISO\x209660\x2fHFS\x20FILESYSTEM\x20CREATOR\x20\x28C\x29\x201993\x20E.YOUNGDALE\x20\x28C\x29\x201997-2006\x20J.PEARSON\x2fJ.SCHILLING\x20\x28C\x29\x202006-2007\x20CDRKIT\x20TEAM
 ID_FS_BLOCK_SIZE=2048
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=452608
 ID_FS_LABEL=ThisIsVolumeName
 ID_FS_LABEL_ENC=ThisIsVolumeName
 ID_FS_SYSTEM_ID=LINUX
index 11403fdb0ac1b4ae90762ab2f3c882226ff9c1ba..bdc2d21386a32c6ee52a52da58b1d9f801c9c4f3 100644 (file)
@@ -2,6 +2,7 @@ ID_FS_APPLICATION_ID=Nero\x20Linux
 ID_FS_BLOCK_SIZE=2048
 ID_FS_DATA_PREPARER_ID=Naïve\x20and\x20very\x20looooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONG\x20DATA\x20PREPARER
 ID_FS_FSBLOCKSIZE=2048
+ID_FS_FSSIZE=1228800
 ID_FS_LABEL=Naïve_and_very_lOOOOOOOONG_LABEL
 ID_FS_LABEL_ENC=Naïve\x20and\x20very\x20lOOOOOOOONG_LABEL
 ID_FS_PUBLISHER_ID=Naïve\x20and\x20very\x20looooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONG\x20PUBLISHER