aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-05-08 16:51:50 +0200
committerKevin Wolf <kwolf@redhat.com>2012-05-10 10:32:12 +0200
commitdc5a137125d6ac641c566f10e68bf6e1fe31bcb5 (patch)
tree27ae82c1b297705351bbfdd8852b416e4804e4e3
parent6405875cdd10e531ad3dedaad86ae1ccc4b14f20 (diff)
downloadqemu-dc5a137125d6ac641c566f10e68bf6e1fe31bcb5.zip
qemu-dc5a137125d6ac641c566f10e68bf6e1fe31bcb5.tar.gz
qemu-dc5a137125d6ac641c566f10e68bf6e1fe31bcb5.tar.bz2
qemu-img: make "info" backing file output correct and easier to use
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 <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block.c19
-rw-r--r--block.h2
-rw-r--r--qemu-img.c12
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);