qcow2.py: Subcommand for changing header fields
authorKevin Wolf <kwolf@redhat.com>
Mon, 13 May 2013 12:00:15 +0000 (14:00 +0200)
committerStefan Hajnoczi <stefanha@redhat.com>
Fri, 24 May 2013 14:17:55 +0000 (16:17 +0200)
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
tests/qemu-iotests/qcow2.py

index fecf5b9a5985e8fa352475500f23dfc9aa0da022..44a2b45641a37a7c236ee8987cbcafe53caca54f 100755 (executable)
@@ -149,6 +149,22 @@ def cmd_dump_header(fd):
     h.dump()
     h.dump_extensions()
 
+def cmd_set_header(fd, name, value):
+    try:
+        value = int(value, 0)
+    except:
+        print "'%s' is not a valid number" % value
+        sys.exit(1)
+
+    fields = (field[2] for field in QcowHeader.fields)
+    if not name in fields:
+        print "'%s' is not a known header field" % name
+        sys.exit(1)
+
+    h = QcowHeader(fd)
+    h.__dict__[name] = value
+    h.update(fd)
+
 def cmd_add_header_ext(fd, magic, data):
     try:
         magic = int(magic, 0)
@@ -205,6 +221,7 @@ def cmd_set_feature_bit(fd, group, bit):
 
 cmds = [
     [ 'dump-header',    cmd_dump_header,    0, 'Dump image header and header extensions' ],
+    [ 'set-header',     cmd_set_header,     2, 'Set a field in the header'],
     [ 'add-header-ext', cmd_add_header_ext, 2, 'Add a header extension' ],
     [ 'del-header-ext', cmd_del_header_ext, 1, 'Delete a header extension' ],
     [ 'set-feature-bit', cmd_set_feature_bit, 2, 'Set a feature bit'],