From patchwork Thu Dec 9 11:10:10 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Wolf X-Patchwork-Id: 74947 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 5580AB6EEB for ; Fri, 10 Dec 2010 04:12:49 +1100 (EST) Received: from localhost ([127.0.0.1]:38401 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PQk2w-0008L2-BK for incoming@patchwork.ozlabs.org; Thu, 09 Dec 2010 12:12:46 -0500 Received: from [140.186.70.92] (port=44736 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PQeNJ-0006Jd-JQ for qemu-devel@nongnu.org; Thu, 09 Dec 2010 06:09:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PQeNI-0000Jt-85 for qemu-devel@nongnu.org; Thu, 09 Dec 2010 06:09:25 -0500 Received: from mx1.redhat.com ([209.132.183.28]:25355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PQeNI-0000Jn-06 for qemu-devel@nongnu.org; Thu, 09 Dec 2010 06:09:24 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oB9B9MgO006201 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 Dec 2010 06:09:22 -0500 Received: from dhcp-5-188.str.redhat.com (dhcp-5-175.str.redhat.com [10.32.5.175]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id oB9B91o2014178; Thu, 9 Dec 2010 06:09:21 -0500 From: Kevin Wolf To: anthony@codemonkey.ws Date: Thu, 9 Dec 2010 12:10:10 +0100 Message-Id: <1291893010-29223-15-git-send-email-kwolf@redhat.com> In-Reply-To: <1291893010-29223-1-git-send-email-kwolf@redhat.com> References: <1291893010-29223-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. Cc: kwolf@redhat.com, qemu-devel@nongnu.org Subject: [Qemu-devel] [PATCH 14/14] qemu-img: Fail creation if backing format is invalid X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Stefan Hajnoczi The qemu-img create command should check the backing format to ensure only image files with valid backing formats are created. By checking in qemu-img.c we can print a useful error message. Signed-off-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- qemu-img.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index c5a173c..52282e3 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -288,6 +288,7 @@ static int img_create(int argc, char **argv) const char *base_filename = NULL; BlockDriver *drv, *proto_drv; QEMUOptionParameter *param = NULL, *create_options = NULL; + QEMUOptionParameter *backing_fmt = NULL; char *options = NULL; for(;;) { @@ -379,14 +380,22 @@ static int img_create(int argc, char **argv) goto out; } + backing_fmt = get_option_parameter(param, BLOCK_OPT_BACKING_FMT); + if (backing_fmt && backing_fmt->value.s) { + if (!bdrv_find_format(backing_fmt->value.s)) { + error("Unknown backing file format '%s'", + backing_fmt->value.s); + ret = -1; + goto out; + } + } + // The size for the image must always be specified, with one exception: // If we are using a backing file, we can obtain the size from there if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) { QEMUOptionParameter *backing_file = get_option_parameter(param, BLOCK_OPT_BACKING_FILE); - QEMUOptionParameter *backing_fmt = - get_option_parameter(param, BLOCK_OPT_BACKING_FMT); if (backing_file && backing_file->value.s) { BlockDriverState *bs; @@ -395,14 +404,7 @@ static int img_create(int argc, char **argv) char buf[32]; if (backing_fmt && backing_fmt->value.s) { - if (bdrv_find_format(backing_fmt->value.s)) { - fmt = backing_fmt->value.s; - } else { - error("Unknown backing file format '%s'", - backing_fmt->value.s); - ret = -1; - goto out; - } + fmt = backing_fmt->value.s; } bs = bdrv_new_open(backing_file->value.s, fmt, BDRV_O_FLAGS);