[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 15/20] vmdk: extract vmdk_read_desc
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 15/20] vmdk: extract vmdk_read_desc |
Date: |
Tue, 11 Feb 2014 18:03:48 +0100 |
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/vmdk.c | 40 +++++++++++++++++++++++++++++-----------
1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 99ca60f..58f4c34 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -529,6 +529,32 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs,
static int vmdk_open_desc_file(BlockDriverState *bs, int flags,
uint64_t desc_offset, Error **errp);
+static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset,
+ Error **errp)
+{
+ int64_t size;
+ char *buf;
+ int ret;
+
+ size = bdrv_getlength(file);
+ if (size < 0) {
+ error_setg_errno(errp, -size, "Could not access file");
+ return NULL;
+ }
+
+ size = MIN(size, 1 << 20); /* avoid unbounded allocation */
+ buf = g_malloc0(size + 1);
+
+ ret = bdrv_pread(file, desc_offset, buf, size);
+ if (ret < 0) {
+ error_setg_errno(errp, -ret, "Could not read from file");
+ g_free(buf);
+ return NULL;
+ }
+
+ return buf;
+}
+
static int vmdk_open_vmdk4(BlockDriverState *bs,
BlockDriverState *file,
int flags, Error **errp)
@@ -822,23 +847,16 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int
flags,
uint64_t desc_offset, Error **errp)
{
int ret;
- char *buf = NULL;
+ char *buf;
char ct[128];
BDRVVmdkState *s = bs->opaque;
- int64_t size;
- size = bdrv_getlength(bs->file);
- if (size < 0) {
+ buf = vmdk_read_desc(bs->file, desc_offset, errp);
+ if (!buf) {
return -EINVAL;
- }
-
- size = MIN(size, 1 << 20); /* avoid unbounded allocation */
- buf = g_malloc0(size + 1);
-
- ret = bdrv_pread(bs->file, desc_offset, buf, size);
- if (ret < 0) {
goto exit;
}
+
if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) {
ret = -EMEDIUMTYPE;
goto exit;
--
1.8.5.3
[Qemu-devel] [PATCH v2 11/20] qcow: correctly propagate errors, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 12/20] qed: correctly propagate errors, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 13/20] vhdx: correctly propagate errors, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 14/20] vvfat: correctly propagate errors, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 15/20] vmdk: extract vmdk_read_desc,
Paolo Bonzini <=
[Qemu-devel] [PATCH v2 16/20] vmdk: push vmdk_read_desc up to caller, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 17/20] vmdk: do not try opening a file as both image and descriptor, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 18/20] vmdk: correctly propagate errors, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 19/20] block: do not abuse EMEDIUMTYPE, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 20/20] vdi: say why an image is bad, Paolo Bonzini, 2014/02/11
[Qemu-devel] [PATCH v2 05/20] iscsi: fix indentation, Paolo Bonzini, 2014/02/11
Re: [Qemu-devel] [PATCH v2 00/20] Improve bdrv_open error messages, Stefan Hajnoczi, 2014/02/14