Stefan Weil <s...@weilnetz.de> writes: > This improves error reports for bochs, cow, qcow, qcow2, qed and vmdk > when a file with the wrong format is selected. > > Signed-off-by: Stefan Weil <s...@weilnetz.de> > --- > block/bochs.c | 2 +- > block/cow.c | 2 +- > block/qcow.c | 2 +- > block/qcow2.c | 2 +- > block/qed.c | 2 +- > block/vmdk.c | 4 ++-- > 6 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/block/bochs.c b/block/bochs.c > index 1b1d9cd..3737583 100644 > --- a/block/bochs.c > +++ b/block/bochs.c > @@ -126,7 +126,7 @@ static int bochs_open(BlockDriverState *bs, int flags) > strcmp(bochs.subtype, GROWING_TYPE) || > ((le32_to_cpu(bochs.version) != HEADER_VERSION) && > (le32_to_cpu(bochs.version) != HEADER_V1))) { > - goto fail; > + return -EMEDIUMTYPE; > } > > if (le32_to_cpu(bochs.version) == HEADER_V1) {
You make the function return either 0, -1 or -EMEDIUMTYPE. Please make it return either 0 or a negative errno code, like this (untested): diff --git a/block/bochs.c b/block/bochs.c index 1b1d9cd..a9eb338 100644 --- a/block/bochs.c +++ b/block/bochs.c @@ -111,14 +111,15 @@ static int bochs_probe(const uint8_t *buf, int buf_size, const char *filename) static int bochs_open(BlockDriverState *bs, int flags) { BDRVBochsState *s = bs->opaque; - int i; + int ret, i; struct bochs_header bochs; struct bochs_header_v1 header_v1; bs->read_only = 1; // no write support yet - if (bdrv_pread(bs->file, 0, &bochs, sizeof(bochs)) != sizeof(bochs)) { - goto fail; + ret = bdrv_pread(bs->file, 0, &bochs, sizeof(bochs)); + if (ret < 0) { + return ret; } if (strcmp(bochs.magic, HEADER_MAGIC) || @@ -126,7 +127,7 @@ static int bochs_open(BlockDriverState *bs, int flags) strcmp(bochs.subtype, GROWING_TYPE) || ((le32_to_cpu(bochs.version) != HEADER_VERSION) && (le32_to_cpu(bochs.version) != HEADER_V1))) { - goto fail; + return -EMEDIUMTYPE; } if (le32_to_cpu(bochs.version) == HEADER_V1) { @@ -138,9 +139,11 @@ static int bochs_open(BlockDriverState *bs, int flags) s->catalog_size = le32_to_cpu(bochs.extra.redolog.catalog); s->catalog_bitmap = g_malloc(s->catalog_size * 4); - if (bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap, - s->catalog_size * 4) != s->catalog_size * 4) - goto fail; + ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap, + s->catalog_size * 4); + if (ret < 0) { + return ret; + } for (i = 0; i < s->catalog_size; i++) le32_to_cpus(&s->catalog_bitmap[i]); @@ -153,8 +156,6 @@ static int bochs_open(BlockDriverState *bs, int flags) qemu_co_mutex_init(&s->lock); return 0; - fail: - return -1; } static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num) Same for all the other bdrv_open() methods.