From: Thomas Weißschuh Date: Wed, 30 Nov 2022 03:17:19 +0000 (+0100) Subject: libblkid: iso9660: read block size from superblock X-Git-Tag: v2.39-rc1~366^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b592266638e544aff7b123cb822c3e9a979ff730;p=thirdparty%2Futil-linux.git libblkid: iso9660: read block size from superblock --- diff --git a/libblkid/src/superblocks/iso9660.c b/libblkid/src/superblocks/iso9660.c index 1172f9c259..e67da9d706 100644 --- a/libblkid/src/superblocks/iso9660.c +++ b/libblkid/src/superblocks/iso9660.c @@ -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); diff --git a/tests/expected/blkid/low-probe-iso b/tests/expected/blkid/low-probe-iso index 3e9be8f985..fcf6a34290 100644 --- a/tests/expected/blkid/low-probe-iso +++ b/tests/expected/blkid/low-probe-iso @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-different-iso-joliet-label b/tests/expected/blkid/low-probe-iso-different-iso-joliet-label index 34663a3581..37fffabd95 100644 --- a/tests/expected/blkid/low-probe-iso-different-iso-joliet-label +++ b/tests/expected/blkid/low-probe-iso-different-iso-joliet-label @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-joliet b/tests/expected/blkid/low-probe-iso-joliet index c92484a75b..1cc8b65edd 100644 --- a/tests/expected/blkid/low-probe-iso-joliet +++ b/tests/expected/blkid/low-probe-iso-joliet @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-multi-genisoimage-0 b/tests/expected/blkid/low-probe-iso-multi-genisoimage-0 index eed747e489..e022d7e963 100644 --- a/tests/expected/blkid/low-probe-iso-multi-genisoimage-0 +++ b/tests/expected/blkid/low-probe-iso-multi-genisoimage-0 @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-multi-genisoimage-174 b/tests/expected/blkid/low-probe-iso-multi-genisoimage-174 index aa71cff78f..44940e197c 100644 --- a/tests/expected/blkid/low-probe-iso-multi-genisoimage-174 +++ b/tests/expected/blkid/low-probe-iso-multi-genisoimage-174 @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-multi-genisoimage-348 b/tests/expected/blkid/low-probe-iso-multi-genisoimage-348 index caf2010a5e..203f081f71 100644 --- a/tests/expected/blkid/low-probe-iso-multi-genisoimage-348 +++ b/tests/expected/blkid/low-probe-iso-multi-genisoimage-348 @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-rr-joliet b/tests/expected/blkid/low-probe-iso-rr-joliet index fdfc69616d..386fd76583 100644 --- a/tests/expected/blkid/low-probe-iso-rr-joliet +++ b/tests/expected/blkid/low-probe-iso-rr-joliet @@ -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 diff --git a/tests/expected/blkid/low-probe-iso-unicode-long-label b/tests/expected/blkid/low-probe-iso-unicode-long-label index 11403fdb0a..bdc2d21386 100644 --- a/tests/expected/blkid/low-probe-iso-unicode-long-label +++ b/tests/expected/blkid/low-probe-iso-unicode-long-label @@ -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