Patchwork [2/7] block: qemu-iotests, fix _make_test_img() to work with spaced pathnames

login
register
mail settings
Submitter Jeff Cody
Date Oct. 31, 2013, 3:57 p.m.
Message ID <bcac145ff9aadc8fc239d610fc5ff363b547cd8a.1383231037.git.jcody@redhat.com>
Download mbox | patch
Permalink /patch/287550/
State New
Headers show

Comments

Jeff Cody - Oct. 31, 2013, 3:57 p.m.
_make_test_img() currently works with spaced pathnames only when not
specifying a backing file.  This fixes it so that the backing file
argument is properly quoted.

Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 tests/qemu-iotests/common.rc | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
Eric Blake - Oct. 31, 2013, 4:23 p.m.
On 10/31/2013 09:57 AM, Jeff Cody wrote:
> _make_test_img() currently works with spaced pathnames only when not
> specifying a backing file.  This fixes it so that the backing file
> argument is properly quoted.
> 
> Signed-off-by: Jeff Cody <jcody@redhat.com>
> ---
>  tests/qemu-iotests/common.rc | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

As a slight optimization, you could avoid a subshell:

>      # XXX(hch): have global image options?
> -    $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size 2>&1 | \
> +    (
> +     if [ $use_backing = 1 ]; then
> +        $QEMU_IMG create -f $IMGFMT $extra_img_options -b "$backing_file" "$img_name" $image_size 2>&1
> +     else
> +        $QEMU_IMG create -f $IMGFMT $extra_img_options "$img_name" $image_size 2>&1
> +     fi
> +    ) | \

$QEMU_IMG create -f $IMGFMT $extra_img_options \
  ${backing_file:+-b "$backing_file"} "$img_name" $image_size 2>&1 |

But as not everyone is a shell guru to recognize the ${var+:expansion}
trick, I'm fine with the version you proposed.

Patch

diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 4e82604..d24de2c 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -111,6 +111,8 @@  _make_test_img()
     local image_size=$*
     local optstr=""
     local img_name=""
+    local use_backing=0
+    local backing_file=""
 
     if [ -n "$TEST_IMG_FILE" ]; then
         img_name=$TEST_IMG_FILE
@@ -123,7 +125,8 @@  _make_test_img()
     fi
 
     if [ "$1" = "-b" ]; then
-        extra_img_options="$1 $2"
+        use_backing=1
+        backing_file=$2
         image_size=$3
     fi
     if [ \( "$IMGFMT" = "qcow2" -o "$IMGFMT" = "qed" \) -a -n "$CLUSTER_SIZE" ]; then
@@ -135,7 +138,13 @@  _make_test_img()
     fi
 
     # XXX(hch): have global image options?
-    $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size 2>&1 | \
+    (
+     if [ $use_backing = 1 ]; then
+        $QEMU_IMG create -f $IMGFMT $extra_img_options -b "$backing_file" "$img_name" $image_size 2>&1
+     else
+        $QEMU_IMG create -f $IMGFMT $extra_img_options "$img_name" $image_size 2>&1
+     fi
+    ) | \
         sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
             -e "s#$TEST_DIR#TEST_DIR#g" \
             -e "s#$IMGFMT#IMGFMT#g" \