| Submitter | Markus Armbruster |
|---|---|
| Date | Jan. 18, 2013, 8:53 a.m. |
| Message ID | <871udizxb5.fsf@blackfin.pond.sub.org> |
| Download | mbox | patch |
| Permalink | /patch/213525/ |
| State | New |
| Headers | show |
Comments
Am 18.01.2013 09:53, schrieb Markus Armbruster: > Stefan Weil <sw@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 <sw@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): Hi Markus, returning 0, -1 is like before, only returning -EMEDIUMTYPE is new. You are right, a return value of -1 should be replaced by a negative error value. I fixed this for block/vdi.c in a separate patch as suggested by Kevin, see http://patchwork.ozlabs.org/patch/213375/. The same kind of improvement should be done for other block drivers which currently use -1, but that can be done after my patch series was applied. The primary purpose of my patch series was fixing open bugreports. For vdi I did more because I feel responsible for that part of the code. Regards, StefanW.
Patch
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)