From patchwork Wed Jul 21 19:51:51 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Weil X-Patchwork-Id: 59492 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]) by ozlabs.org (Postfix) with ESMTP id B86811007D5 for ; Thu, 22 Jul 2010 06:00:24 +1000 (EST) Received: from localhost ([127.0.0.1]:53400 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ObfNO-0002k8-2O for incoming@patchwork.ozlabs.org; Wed, 21 Jul 2010 15:54:46 -0400 Received: from [140.186.70.92] (port=58907 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ObfL7-0001rl-DI for qemu-devel@nongnu.org; Wed, 21 Jul 2010 15:52:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1ObfKs-00070B-0u for qemu-devel@nongnu.org; Wed, 21 Jul 2010 15:52:11 -0400 Received: from moutng.kundenserver.de ([212.227.17.8]:60549) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1ObfKr-0006z1-Pa for qemu-devel@nongnu.org; Wed, 21 Jul 2010 15:52:09 -0400 Received: from flocke.weilnetz.de (p54ADF355.dip.t-dialin.net [84.173.243.85]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0LnUdS-1PFx6d0Tfy-00hgNh; Wed, 21 Jul 2010 21:52:01 +0200 Received: from stefan by flocke.weilnetz.de with local (Exim 4.72) (envelope-from ) id 1ObfKh-0001p9-TM; Wed, 21 Jul 2010 21:52:00 +0200 From: Stefan Weil To: QEMU Developers Date: Wed, 21 Jul 2010 21:51:51 +0200 Message-Id: <1279741911-6983-1-git-send-email-weil@mail.berlios.de> X-Mailer: git-send-email 1.7.1 In-Reply-To: <4C4553D5.7090104@redhat.com> References: <4C4553D5.7090104@redhat.com> X-Provags-ID: V02:K0:3ocp2ZtTS2Nvm11eNM2yv4axxMNDd5HkkjQbXsNfsWL Nkb0O/fMdfhVkWtOH0/MSBXNzfGFazwWQ1u9R1YDk6xTzT36e9 SMjLa9+P2s1kEUGamXGGEf/c1l2Glzw7RE0uhUXX1s8Dqq+qYc +7Qw6Gv4Ug2jmE80aILPSIFye9mwT6G1uS4aX3gosfjboDTCAH R2sqzUooOYEFjRCQPso3rVjLNVZ0mvFzAcdHgD5FtCaLrsdv09 OeiL+1kPG9844 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. Cc: Kevin Wolf Subject: [Qemu-devel] [PATCH] block: Use error codes from lower levels for error message 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 "No such file or directory" is a misleading error message when a user tries to open a file with wrong permissions. v2: return an 0/-errno int and pass the BlockDriver* by reference as suggested by Kevin Wolf Cc: Kevin Wolf Signed-off-by: Stefan Weil --- block.c | 27 +++++++++++++++++++-------- 1 files changed, 19 insertions(+), 8 deletions(-) diff --git a/block.c b/block.c index b133b70..b49abf2 100644 --- a/block.c +++ b/block.c @@ -330,7 +330,7 @@ BlockDriver *bdrv_find_protocol(const char *filename) return NULL; } -static BlockDriver *find_image_format(const char *filename) +static int find_image_format(const char *filename, BlockDriver **pdrv) { int ret, score, score_max; BlockDriver *drv1, *drv; @@ -338,19 +338,27 @@ static BlockDriver *find_image_format(const char *filename) BlockDriverState *bs; ret = bdrv_file_open(&bs, filename, 0); - if (ret < 0) - return NULL; + if (ret < 0) { + *pdrv = NULL; + return ret; + } /* Return the raw BlockDriver * to scsi-generic devices or empty drives */ if (bs->sg || !bdrv_is_inserted(bs)) { bdrv_delete(bs); - return bdrv_find_format("raw"); + drv = bdrv_find_format("raw"); + if (!drv) { + ret = -ENOENT; + } + *pdrv = drv; + return ret; } ret = bdrv_pread(bs, 0, buf, sizeof(buf)); bdrv_delete(bs); if (ret < 0) { - return NULL; + *pdrv = NULL; + return ret; } score_max = 0; @@ -364,7 +372,11 @@ static BlockDriver *find_image_format(const char *filename) } } } - return drv; + if (!drv) { + ret = -ENOENT; + } + *pdrv = drv; + return ret; } /** @@ -571,12 +583,11 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags, /* Find the right image format driver */ if (!drv) { - drv = find_image_format(filename); + ret = find_image_format(filename, &drv); probed = 1; } if (!drv) { - ret = -ENOENT; goto unlink_and_fail; }