[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/10] block: Don't parse 'filename' option
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 04/10] block: Don't parse 'filename' option |
Date: |
Fri, 4 Apr 2014 21:27:43 +0200 |
When using the QDict option 'filename', it is supposed to be interpreted
literally. The code did correctly avoid guessing the protocol from any
string before the first colon, but it still called bdrv_parse_filename()
which would, for example, incorrectly remove a 'file:' prefix in the
raw-posix driver.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
block.c | 8 ++++----
tests/qemu-iotests/051 | 4 ++++
tests/qemu-iotests/051.out | 11 +++++++++++
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index 7a90a1b..df2b8d1 100644
--- a/block.c
+++ b/block.c
@@ -968,7 +968,7 @@ static int bdrv_file_open(BlockDriverState *bs, const char
*filename,
{
BlockDriver *drv;
const char *drvname;
- bool allow_protocol_prefix = false;
+ bool parse_filename = false;
Error *local_err = NULL;
int ret;
@@ -977,7 +977,7 @@ static int bdrv_file_open(BlockDriverState *bs, const char
*filename,
filename = qdict_get_try_str(*options, "filename");
} else if (filename && !qdict_haskey(*options, "filename")) {
qdict_put(*options, "filename", qstring_from_str(filename));
- allow_protocol_prefix = true;
+ parse_filename = true;
} else {
error_setg(errp, "Can't specify 'file' and 'filename' options at the "
"same time");
@@ -994,7 +994,7 @@ static int bdrv_file_open(BlockDriverState *bs, const char
*filename,
}
qdict_del(*options, "driver");
} else if (filename) {
- drv = bdrv_find_protocol(filename, allow_protocol_prefix);
+ drv = bdrv_find_protocol(filename, parse_filename);
if (!drv) {
error_setg(errp, "Unknown protocol");
}
@@ -1010,7 +1010,7 @@ static int bdrv_file_open(BlockDriverState *bs, const
char *filename,
}
/* Parse the filename and open it */
- if (drv->bdrv_parse_filename && filename) {
+ if (drv->bdrv_parse_filename && parse_filename) {
drv->bdrv_parse_filename(filename, *options, &local_err);
if (local_err) {
error_propagate(errp, local_err);
diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
index 14694e1..2f79b26 100755
--- a/tests/qemu-iotests/051
+++ b/tests/qemu-iotests/051
@@ -204,6 +204,10 @@ run_qemu -hda foo:bar
run_qemu -drive file=foo:bar
run_qemu -drive file.filename=foo:bar
+run_qemu -hda "file:$TEST_IMG"
+run_qemu -drive file="file:$TEST_IMG"
+run_qemu -drive file.filename="file:$TEST_IMG"
+
echo
echo === Snapshot mode ===
echo
diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out
index f5e33ff..671ac5f 100644
--- a/tests/qemu-iotests/051.out
+++ b/tests/qemu-iotests/051.out
@@ -275,6 +275,17 @@ QEMU_PROG: -drive file=foo:bar: could not open disk image
foo:bar: Unknown proto
Testing: -drive file.filename=foo:bar
QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0:
Could not open 'foo:bar': No such file or directory
+Testing: -hda file:TEST_DIR/t.qcow2
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
+
+Testing: -drive file=file:TEST_DIR/t.qcow2
+QEMU X.Y.Z monitor - type 'help' for more information
+(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
+
+Testing: -drive file.filename=file:TEST_DIR/t.qcow2
+QEMU_PROG: -drive file.filename=file:TEST_DIR/t.qcow2: could not open disk
image ide0-hd0: Could not open 'file:TEST_DIR/t.qcow2': No such file or
directory
+
=== Snapshot mode ===
--
1.8.3.1
- [Qemu-devel] [PULL 00/10] Block patches for 2.0, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 02/10] qcow2: Flush metadata during read-only reopen, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 01/10] iscsi: Don't set error if already set in iscsi_do_inquiry, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 03/10] qcow2: Put cache reference in error case, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 04/10] block: Don't parse 'filename' option,
Kevin Wolf <=
- [Qemu-devel] [PULL 06/10] block: Fix snapshot=on for protocol parsed from filename, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 05/10] qemu-iotests: Remove CR line endings in reference output, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 08/10] dma-helpers: Initialize DMAAIOCB in_cancel flag, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 07/10] block: Check bdrv_getlength() return value in bdrv_append_temp_snapshot(), Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 09/10] iothread: make IOThread struct definition public, Kevin Wolf, 2014/04/04
- [Qemu-devel] [PULL 10/10] dataplane: replace iothread object_add() with embedded instance, Kevin Wolf, 2014/04/04
- Re: [Qemu-devel] [PULL 00/10] Block patches for 2.0, Peter Maydell, 2014/04/05