Fixed-size VHD images don't have a header, only a footer. To be able to still detect them right, support probing via the file name, too.
Without this change, images get detected as raw: $ qemu-img create -f vpc -o subformat=fixed test.vhd 2G Formatting 'test.vhd', fmt=vpc size=2147483648 subformat=fixed $ qemu-img info test.vhd image: test.vhd file format: raw virtual size: 2 GiB (2147992064 bytes) disk size: 8 KiB With this change: $ qemu-img info test.vhd image: test.vhd file format: vpc virtual size: 2 GiB (2147991552 bytes) disk size: 8 KiB Resolves: https://bugs.launchpad.net/qemu/+bug/1819182 Signed-off-by: Thomas Huth <th...@redhat.com> --- I've marked the subject with RFC since I'm not quite sure whether this is really a good idea... please let me know what you think about it... block/vpc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/block/vpc.c b/block/vpc.c index 17a705b482..be561e4b39 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -191,8 +191,18 @@ static uint32_t vpc_checksum(void *p, size_t size) static int vpc_probe(const uint8_t *buf, int buf_size, const char *filename) { - if (buf_size >= 8 && !strncmp((char *)buf, "conectix", 8)) + if (buf_size >= 8 && !strncmp((char *)buf, "conectix", 8)) { return 100; + } + + /* It could be a fixed-size image without header -> check extension, too */ + if (filename) { + int len = strlen(filename); + if (len > 4 && !strcasecmp(&filename[len - 4], ".vhd")) { + return 10; + } + } + return 0; } -- 2.27.0