[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 25/54] vmdk: extract vmdk_read_desc
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 25/54] vmdk: extract vmdk_read_desc |
Date: |
Fri, 21 Feb 2014 23:12:22 +0100 |
From: Paolo Bonzini <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/vmdk.c | 41 ++++++++++++++++++++++++++++++-----------
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 54a1c59..b808108 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)
@@ -823,23 +849,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.1.4
- [Qemu-devel] [PULL 14/54] nbd: move socket wrappers to qemu-nbd, (continued)
- [Qemu-devel] [PULL 14/54] nbd: move socket wrappers to qemu-nbd, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 15/54] iscsi: fix indentation, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 16/54] iscsi: correctly propagate errors in iscsi_open, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 17/54] gluster: default scheme to gluster:// and host to localhost., Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 19/54] cow: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 18/54] gluster: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 20/54] curl: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 21/54] qcow: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 22/54] qed: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 23/54] vhdx: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 25/54] vmdk: extract vmdk_read_desc,
Kevin Wolf <=
- [Qemu-devel] [PULL 26/54] vmdk: push vmdk_read_desc up to caller, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 24/54] vvfat: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 27/54] vmdk: do not try opening a file as both image and descriptor, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 28/54] vmdk: correctly propagate errors, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 29/54] block: do not abuse EMEDIUMTYPE, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 30/54] vdi: say why an image is bad, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 31/54] qemu-option: has_help_option() and is_valid_option_list(), Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 32/54] qemu-img create: Support multiple -o options, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 33/54] qemu-img convert: Support multiple -o options, Kevin Wolf, 2014/02/21
- [Qemu-devel] [PULL 34/54] qemu-img amend: Support multiple -o options, Kevin Wolf, 2014/02/21