From owner-svn-src-user@FreeBSD.ORG  Fri Nov 28 21:09:51 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 56A76E8A;
 Fri, 28 Nov 2014 21:09:51 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 43880281;
 Fri, 28 Nov 2014 21:09:51 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sASL9plk028254;
 Fri, 28 Nov 2014 21:09:51 GMT (envelope-from marcel@FreeBSD.org)
Received: (from marcel@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id sASL9pk6028253;
 Fri, 28 Nov 2014 21:09:51 GMT (envelope-from marcel@FreeBSD.org)
Message-Id: <201411282109.sASL9pk6028253@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: marcel set sender to
 marcel@FreeBSD.org using -f
From: Marcel Moolenaar <marcel@FreeBSD.org>
Date: Fri, 28 Nov 2014 21:09:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r275217 - user/marcel/libvdsk/libvdsk
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 28 Nov 2014 21:09:51 -0000

Author: marcel
Date: Fri Nov 28 21:09:50 2014
New Revision: 275217
URL: https://svnweb.freebsd.org/changeset/base/275217

Log:
  Code the probe a bit better so that it isn't a memory leak. Also mark
  the format as writable.

Modified:
  user/marcel/libvdsk/libvdsk/qcow.c

Modified: user/marcel/libvdsk/libvdsk/qcow.c
==============================================================================
--- user/marcel/libvdsk/libvdsk/qcow.c	Fri Nov 28 21:08:23 2014	(r275216)
+++ user/marcel/libvdsk/libvdsk/qcow.c	Fri Nov 28 21:09:50 2014	(r275217)
@@ -88,12 +88,18 @@ qcow_probe(struct vdsk *vdsk)
 		return (errno);
 
 	if (read(vdsk->fd, hdr, vdsk->sectorsize) != vdsk->sectorsize)
-		return (errno);
-
-	if (be32dec(&hdr->magic) != QCOW_MAGIC)
-		return (ENXIO);
+		goto out;
 
-	return (0);
+	if (be32dec(&hdr->magic) != QCOW_MAGIC) {
+		errno = ENXIO;
+		goto out;
+	}
+
+	errno = 0;
+
+ out:
+	free(hdr);
+	return (errno);
 }
 
 static int
@@ -136,7 +142,7 @@ qcow_flush(struct vdsk *vdsk __unused)
 static struct vdsk_format qcow_format = {
 	.name = "qcow",
 	.description = "QEMU Copy-On-Write, version 1",
-	.flags = VDSKFMT_HAS_HEADER,
+	.flags = VDSKFMT_CAN_WRITE | VDSKFMT_HAS_HEADER,
 	.probe = qcow_probe,
 	.open = qcow_open,
 	.close = qcow_close,