libblkid: udf: Fix parsing UDF revision

UDF revision is stored as decimal number in hexadecimal format.
E.g. number 0x0150 is revision 1.50, number 0x0201 is revision 2.01.

Apparently all UDF test images have number which has same representation in
decimal and hexadecimal format, so problem was not detected.

This patch adds new test image with UDF revision 1.50. Internally number is
stored as 0x0150. In decimal format it is (incorrectly) 1.80, but in
hexadecimal correct 1.50.

$ dd if=/dev/zero of=udf-hdd-mkudffs-1.3-8.img bs=1M count=10
$ mkudffs -r 0x150 -b 512 udf-hdd-mkudffs-1.3-8.img

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
This commit is contained in:
Pali Rohár 2017-11-20 18:16:59 +01:00
parent 07306a0303
commit 3999e62a72
3 changed files with 13 additions and 1 deletions

View File

@ -450,7 +450,9 @@ real_blksz:
}
if (udf_rev)
blkid_probe_sprintf_version(pr, "%d.%02d", (int)(udf_rev >> 8), (int)(udf_rev & 0xFF));
/* UDF revision is stored as decimal number in hexadecimal format.
* E.g. number 0x0150 is revision 1.50, number 0x0201 is revision 2.01. */
blkid_probe_sprintf_version(pr, "%x.%02x", (unsigned int)(udf_rev >> 8), (unsigned int)(udf_rev & 0xFF));
return 0;
}

View File

@ -0,0 +1,10 @@
ID_FS_LABEL=LinuxUDF
ID_FS_LABEL_ENC=LinuxUDF
ID_FS_LOGICAL_VOLUME_ID=LinuxUDF
ID_FS_TYPE=udf
ID_FS_USAGE=filesystem
ID_FS_UUID=5a11940936fe76a8
ID_FS_UUID_ENC=5a11940936fe76a8
ID_FS_VERSION=1.50
ID_FS_VOLUME_ID=LinuxUDF
ID_FS_VOLUME_SET_ID=5a11940936fe76a8LinuxUDF

Binary file not shown.