diff mbox

[v2,3/3] vmdk: Switch to heap arrays for vmdk_parent_open

Message ID 1457425476-32547-4-git-send-email-famz@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Fam Zheng March 8, 2016, 8:24 a.m. UTC
Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/vmdk.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

Comments

Fam Zheng March 9, 2016, 12:43 a.m. UTC | #1
On Tue, 03/08 16:24, Fam Zheng wrote:
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  block/vmdk.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/block/vmdk.c b/block/vmdk.c
> index c68f456..03be7f0 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -343,15 +343,16 @@ static int vmdk_reopen_prepare(BDRVReopenState *state,
>  static int vmdk_parent_open(BlockDriverState *bs)
>  {
>      char *p_name;
> -    char desc[DESC_SIZE + 1];
> +    char *desc;
>      BDRVVmdkState *s = bs->opaque;
>      int ret;
>  
> -    desc[DESC_SIZE] = '\0';
> +    desc = g_malloc0(DESC_SIZE + 1);
>      ret = bdrv_pread(bs->file->bs, s->desc_offset, desc, DESC_SIZE);
>      if (ret < 0) {
> -        return ret;
> +        goto out;
>      }
> +    ret = 0;

Kevin, were you referring to this "ret = 0" in the cover letter? If so, it is
not useless, because ret was set to DESC_SIZE by bdrv_pread. :)

Fam
Kevin Wolf March 9, 2016, 9:50 a.m. UTC | #2
Am 09.03.2016 um 01:43 hat Fam Zheng geschrieben:
> On Tue, 03/08 16:24, Fam Zheng wrote:
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> >  block/vmdk.c | 17 +++++++++++------
> >  1 file changed, 11 insertions(+), 6 deletions(-)
> > 
> > diff --git a/block/vmdk.c b/block/vmdk.c
> > index c68f456..03be7f0 100644
> > --- a/block/vmdk.c
> > +++ b/block/vmdk.c
> > @@ -343,15 +343,16 @@ static int vmdk_reopen_prepare(BDRVReopenState *state,
> >  static int vmdk_parent_open(BlockDriverState *bs)
> >  {
> >      char *p_name;
> > -    char desc[DESC_SIZE + 1];
> > +    char *desc;
> >      BDRVVmdkState *s = bs->opaque;
> >      int ret;
> >  
> > -    desc[DESC_SIZE] = '\0';
> > +    desc = g_malloc0(DESC_SIZE + 1);
> >      ret = bdrv_pread(bs->file->bs, s->desc_offset, desc, DESC_SIZE);
> >      if (ret < 0) {
> > -        return ret;
> > +        goto out;
> >      }
> > +    ret = 0;
> 
> Kevin, were you referring to this "ret = 0" in the cover letter? If so, it is
> not useless, because ret was set to DESC_SIZE by bdrv_pread. :)

Nope, I meant the initialisation in patch 1.

Kevin
Fam Zheng March 10, 2016, 1:53 a.m. UTC | #3
On Wed, 03/09 10:50, Kevin Wolf wrote:
> Am 09.03.2016 um 01:43 hat Fam Zheng geschrieben:
> > On Tue, 03/08 16:24, Fam Zheng wrote:
> > > Signed-off-by: Fam Zheng <famz@redhat.com>
> > > ---
> > >  block/vmdk.c | 17 +++++++++++------
> > >  1 file changed, 11 insertions(+), 6 deletions(-)
> > > 
> > > diff --git a/block/vmdk.c b/block/vmdk.c
> > > index c68f456..03be7f0 100644
> > > --- a/block/vmdk.c
> > > +++ b/block/vmdk.c
> > > @@ -343,15 +343,16 @@ static int vmdk_reopen_prepare(BDRVReopenState *state,
> > >  static int vmdk_parent_open(BlockDriverState *bs)
> > >  {
> > >      char *p_name;
> > > -    char desc[DESC_SIZE + 1];
> > > +    char *desc;
> > >      BDRVVmdkState *s = bs->opaque;
> > >      int ret;
> > >  
> > > -    desc[DESC_SIZE] = '\0';
> > > +    desc = g_malloc0(DESC_SIZE + 1);
> > >      ret = bdrv_pread(bs->file->bs, s->desc_offset, desc, DESC_SIZE);
> > >      if (ret < 0) {
> > > -        return ret;
> > > +        goto out;
> > >      }
> > > +    ret = 0;
> > 
> > Kevin, were you referring to this "ret = 0" in the cover letter? If so, it is
> > not useless, because ret was set to DESC_SIZE by bdrv_pread. :)
> 
> Nope, I meant the initialisation in patch 1.

You're right.

Fam
diff mbox

Patch

diff --git a/block/vmdk.c b/block/vmdk.c
index c68f456..03be7f0 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -343,15 +343,16 @@  static int vmdk_reopen_prepare(BDRVReopenState *state,
 static int vmdk_parent_open(BlockDriverState *bs)
 {
     char *p_name;
-    char desc[DESC_SIZE + 1];
+    char *desc;
     BDRVVmdkState *s = bs->opaque;
     int ret;
 
-    desc[DESC_SIZE] = '\0';
+    desc = g_malloc0(DESC_SIZE + 1);
     ret = bdrv_pread(bs->file->bs, s->desc_offset, desc, DESC_SIZE);
     if (ret < 0) {
-        return ret;
+        goto out;
     }
+    ret = 0;
 
     p_name = strstr(desc, "parentFileNameHint");
     if (p_name != NULL) {
@@ -360,16 +361,20 @@  static int vmdk_parent_open(BlockDriverState *bs)
         p_name += sizeof("parentFileNameHint") + 1;
         end_name = strchr(p_name, '\"');
         if (end_name == NULL) {
-            return -EINVAL;
+            ret = -EINVAL;
+            goto out;
         }
         if ((end_name - p_name) > sizeof(bs->backing_file) - 1) {
-            return -EINVAL;
+            ret = -EINVAL;
+            goto out;
         }
 
         pstrcpy(bs->backing_file, end_name - p_name + 1, p_name);
     }
 
-    return 0;
+out:
+    g_free(desc);
+    return ret;
 }
 
 /* Create and append extent to the extent array. Return the added VmdkExtent