From patchwork Thu May 10 11:49:24 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Wolf X-Patchwork-Id: 158279 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 4B6A8B6EF3 for ; Thu, 10 May 2012 22:58:42 +1000 (EST) Received: from localhost ([::1]:46042 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SSRtO-0003FT-DF for incoming@patchwork.ozlabs.org; Thu, 10 May 2012 07:50:46 -0400 Received: from eggs.gnu.org ([208.118.235.92]:59894) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SSRsi-0001gn-BO for qemu-devel@nongnu.org; Thu, 10 May 2012 07:50:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SSRsf-0006If-IN for qemu-devel@nongnu.org; Thu, 10 May 2012 07:50:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:1027) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SSRsf-0006I4-Ax for qemu-devel@nongnu.org; Thu, 10 May 2012 07:50:01 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4ABnw0i000629 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 10 May 2012 07:49:58 -0400 Received: from dhcp-5-188.str.redhat.com (dhcp-5-175.str.redhat.com [10.32.5.175]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q4ABnYar032449; Thu, 10 May 2012 07:49:58 -0400 From: Kevin Wolf To: anthony@codemonkey.ws Date: Thu, 10 May 2012 13:49:24 +0200 Message-Id: <1336650574-12835-21-git-send-email-kwolf@redhat.com> In-Reply-To: <1336650574-12835-1-git-send-email-kwolf@redhat.com> References: <1336650574-12835-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.132.183.28 Cc: kwolf@redhat.com, qemu-devel@nongnu.org Subject: [Qemu-devel] [PATCH 20/30] qemu-img: make "info" backing file output correct and easier to use X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Paolo Bonzini qemu-img info should use the same logic as qemu when printing the backing file path, or debugging becomes quite tricky. We can also simplify the output in case the backing file has an absolute path or a protocol. Signed-off-by: Paolo Bonzini Signed-off-by: Kevin Wolf --- block.c | 19 +++++++++++-------- block.h | 2 ++ qemu-img.c | 12 +++++++----- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/block.c b/block.c index 2986998..af2ab4f 100644 --- a/block.c +++ b/block.c @@ -270,6 +270,15 @@ void path_combine(char *dest, int dest_size, } } +void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz) +{ + if (bs->backing_file[0] == '\0' || path_has_protocol(bs->backing_file)) { + pstrcpy(dest, sz, bs->backing_file); + } else { + path_combine(dest, sz, bs->filename, bs->backing_file); + } +} + void bdrv_register(BlockDriver *bdrv) { /* Block drivers without coroutine functions need emulation */ @@ -796,14 +805,8 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags, BlockDriver *back_drv = NULL; bs->backing_hd = bdrv_new(""); - - if (path_has_protocol(bs->backing_file)) { - pstrcpy(backing_filename, sizeof(backing_filename), - bs->backing_file); - } else { - path_combine(backing_filename, sizeof(backing_filename), - filename, bs->backing_file); - } + bdrv_get_full_backing_filename(bs, backing_filename, + sizeof(backing_filename)); if (bs->backing_format[0] != '\0') { back_drv = bdrv_find_format(bs->backing_format); diff --git a/block.h b/block.h index f163e54..7408acc 100644 --- a/block.h +++ b/block.h @@ -303,6 +303,8 @@ int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi); const char *bdrv_get_encrypted_filename(BlockDriverState *bs); void bdrv_get_backing_filename(BlockDriverState *bs, char *filename, int filename_size); +void bdrv_get_full_backing_filename(BlockDriverState *bs, + char *dest, size_t sz); int bdrv_can_snapshot(BlockDriverState *bs); int bdrv_is_snapshot(BlockDriverState *bs); BlockDriverState *bdrv_snapshots(void); diff --git a/qemu-img.c b/qemu-img.c index 0ae543c..5434ddc 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1138,11 +1138,13 @@ static int img_info(int argc, char **argv) } bdrv_get_backing_filename(bs, backing_filename, sizeof(backing_filename)); if (backing_filename[0] != '\0') { - path_combine(backing_filename2, sizeof(backing_filename2), - filename, backing_filename); - printf("backing file: %s (actual path: %s)\n", - backing_filename, - backing_filename2); + bdrv_get_full_backing_filename(bs, backing_filename2, + sizeof(backing_filename2)); + printf("backing file: %s", backing_filename); + if (strcmp(backing_filename, backing_filename2) != 0) { + printf(" (actual path: %s)", backing_filename2); + } + putchar('\n'); } dump_snapshots(bs); bdrv_delete(bs);