From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292614; cv=pass; d=zohomail.com; s=zohoarc; b=HF7SLsv3Kk/0RXyGQEJw/uWc3o1QimVTWrCG9sSpCMYfq93mb1qCNDzVvQSkhzXtC9CtwJxSPZd2Zp5toIJNONStI3e/+8mWdfX3neXdeirGgkm8n/emliEX+5Tv67wWUFT7acphKIT0w/n5cMEJZjNmbD6raKTshAZ28H7JbJc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292614; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xWTw/mRr3TBGTaMkg+jXTYAn3cJHIMVJwfbsaPL4OpI=; b=SOAe8peIuPQQ4TWDAKoBTyoTZ24Ok1k3s7AU77sGM9GM2Xt0i40zTekx0nJ2O3lAIlOP19xBS2Z7gnI2yWTOhNBW5napDNq3XXI8qBahQE4FH6XuYmab4jujp6XZS8IucwP9YSAXuKVbj9lPaGh/MJctcdmoHG6HzegTnEyWYlM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292613624655.7006340406876; Thu, 4 Jun 2020 10:43:33 -0700 (PDT) Received: from localhost ([::1]:42410 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgttr-0004yP-S1 for importer@patchew.org; Thu, 04 Jun 2020 13:43:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsL-00037v-CZ; Thu, 04 Jun 2020 13:41:57 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsK-0005oK-Gz; Thu, 04 Jun 2020 13:41:57 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:50 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:50 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H65SVLYlr5+dC7YHikCBp56OjgdY7wus6K8DwxUCSOTjOtfVxFyV1PrySb0GFOZV8mt6ffnKbj/nxWqFWMteSoF92MJ341ekksMlzjbf0S9LUCXaLrIuDhcRt+1yEDqBLhuiVwD7p/tOyq0AL25yTldfXo6bwbDprAIJYGhkEY0SW2zBM9WfY/ATDpGl1kVNFd2n/mokUu7+cKSzdhOiwTfezGEsmYr/esXgYjUkzhspDV4ZdUgphJbalH0HkUTTeN6lsBe6B++bJ0ASTp8Hwo5cv+AFn1G5NOEIEwOzC64pBPc1mQM5rRXTzfZtsZ++vAVf4XWwYx1FWFqpC0G+Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xWTw/mRr3TBGTaMkg+jXTYAn3cJHIMVJwfbsaPL4OpI=; b=SRF+vtSXGYFAUcgAtWIah7ORnpnCunG9WauAErxdClcbk2Cwpj3p+vni2bKMLyXSBRJoEKUQLnRW2FpkAcpSRdgC/Hm2OMxOsNxDO4+iCNi6SF0P0Ry1a6/iFgYH41uukzfDaHrhlZ5Z9fzYBHB2q5FC2+kmfTvHodRmUjiUvzcK+LP+UGXnt+dEbUjmut98uEs4eWmk5KPvMgmiarFmiS/w3umeJ8VQ51Nn9YTNSe37eSfs2gYprqBJsli61eaZ0U28oc/HH6USphqlYVM3OwDJiHfor5hM8kUd5o2uLUO0THe+EsEZWkCeg0VP2EgtMizQhECUqk+2Z92d+ZJf3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xWTw/mRr3TBGTaMkg+jXTYAn3cJHIMVJwfbsaPL4OpI=; b=itYvDSVDvvrbRIP50EL2Pwo59siJRnSixokPf0kQukI0hXS6vieQn2Pb/4nL6TyPvpwLVWShVjLiF0m33pUAg6eeulcj5WPSwjxZAEYvCEzJVGVHXi0WqMmssQoth6LMN7zfhVkFCmLkzaT/jrC5+GQpqt5JTptf7YW8CJDeZXk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 01/12] qcow2.py: python style fixes Date: Thu, 4 Jun 2020 20:41:24 +0300 Message-Id: <20200604174135.11042-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14825470-21b0-4158-5ccb-08d808ae8f86 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:741; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UVh0SzIqQubTrJQH399s1mqjIyGbkIfKeq49OrAxs/5oLmLW+ZvQrtrLsJ0eFn5YGUJE8Oguilp93B0Ib4HpmcBd7XTsoOih02DABr/8rvlALLU8iXX9Jb8SCcPskPeQ+sSiYcLGzkz/NrmtDn7lZvBEfXNEtuHeG/bVVJh/sM0EmiN6dvJ4Qc7id3fzyRlRwbBxhTEt8ZnnXR8FYk1OiQQZ48X4jIstBNHoQBMDZEaR0rsGoM6qHII7oCHkDfbKNtgOIVre886mS6370bGcu5fq4tSKYSVEOA4eY6fUMrLk6JDxuIpzogYcVvvb7y/wDmP6pcYHwcqfvf/Urd7Jag== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: lDPxZT5TLIJG1gTth7llnzn9NxFQLxDgF6Vqf48APqQa4j55f/pkiHXvk8DROwzftSrMF4PWtdrHu0jp7wDL+gG6WP+TZWJrbmLdqbGxAOu3hXLRiASgIdEF2Md3k3Zj0ev+oVdMHrvZtFaMdII4j93rKRjJd3YQxk1o4MGhq/v45LzwBbxD1a0DLXaoYB3fCQcUsXNJRMoC246BwAMeafRqRCYk8cYGjqIP5PORyBKCOONzy7Y3WIT9ru5MVsp3H404C+BciB2MLHn/1bAHIvc25QogdzgMgaWOlZz346tb61yqGLzrrKen5oqFbG8taRUra4HRsVcCTMNIn82K+G8gLkKumlmCGMa5ejDZjZwRaUbAZ0RP4MvqkuJFNo0YVSVprHXmDVtUI3vdRd12DKbwUuZlvqJwl2SlxnYj+Vb/YyLWQst3ukXxOplSq3FdiiJPuSCSaRbxPoaOaGgbZVjzntseTKqH0dRA/bCjiHUR2Bkjccvh/1m24RiA8E3+ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14825470-21b0-4158-5ccb-08d808ae8f86 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:50.0135 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kTjGcpffW3Hx5Jp+vVqZes2wzA07Y2td6F7MnmeOiXk1NJCLO77ICwZwSelmsqfpbNi4k9TmJWjtBMNCvCthEVA+u1YH5J0HfOqk7eR13aM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Fix flake8 complains. Leave the only chunk of lines over 79 characters: initialization of cmds variable. Leave it for another day, when it should be refactored to utilize argparse instead of hand-written parsing. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2.py | 92 +++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 39 deletions(-) diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index 94a07b2f6f..539f5a186b 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -4,6 +4,7 @@ import sys import struct import string =20 + class QcowHeaderExtension: =20 def __init__(self, magic, length, data): @@ -11,14 +12,15 @@ class QcowHeaderExtension: padding =3D 8 - (length % 8) data +=3D b"\0" * padding =20 - self.magic =3D magic + self.magic =3D magic self.length =3D length - self.data =3D data + self.data =3D data =20 @classmethod def create(cls, magic, data): return QcowHeaderExtension(magic, len(data), data) =20 + class QcowHeader: =20 uint32_t =3D 'I' @@ -26,27 +28,27 @@ class QcowHeader: =20 fields =3D [ # Version 2 header fields - [ uint32_t, '%#x', 'magic' ], - [ uint32_t, '%d', 'version' ], - [ uint64_t, '%#x', 'backing_file_offset' ], - [ uint32_t, '%#x', 'backing_file_size' ], - [ uint32_t, '%d', 'cluster_bits' ], - [ uint64_t, '%d', 'size' ], - [ uint32_t, '%d', 'crypt_method' ], - [ uint32_t, '%d', 'l1_size' ], - [ uint64_t, '%#x', 'l1_table_offset' ], - [ uint64_t, '%#x', 'refcount_table_offset' ], - [ uint32_t, '%d', 'refcount_table_clusters' ], - [ uint32_t, '%d', 'nb_snapshots' ], - [ uint64_t, '%#x', 'snapshot_offset' ], + [uint32_t, '%#x', 'magic'], + [uint32_t, '%d', 'version'], + [uint64_t, '%#x', 'backing_file_offset'], + [uint32_t, '%#x', 'backing_file_size'], + [uint32_t, '%d', 'cluster_bits'], + [uint64_t, '%d', 'size'], + [uint32_t, '%d', 'crypt_method'], + [uint32_t, '%d', 'l1_size'], + [uint64_t, '%#x', 'l1_table_offset'], + [uint64_t, '%#x', 'refcount_table_offset'], + [uint32_t, '%d', 'refcount_table_clusters'], + [uint32_t, '%d', 'nb_snapshots'], + [uint64_t, '%#x', 'snapshot_offset'], =20 # Version 3 header fields - [ uint64_t, 'mask', 'incompatible_features' ], - [ uint64_t, 'mask', 'compatible_features' ], - [ uint64_t, 'mask', 'autoclear_features' ], - [ uint32_t, '%d', 'refcount_order' ], - [ uint32_t, '%d', 'header_length' ], - ]; + [uint64_t, 'mask', 'incompatible_features'], + [uint64_t, 'mask', 'compatible_features'], + [uint64_t, 'mask', 'autoclear_features'], + [uint32_t, '%d', 'refcount_order'], + [uint32_t, '%d', 'header_length'], + ] =20 fmt =3D '>' + ''.join(field[0] for field in fields) =20 @@ -59,7 +61,7 @@ class QcowHeader: =20 header =3D struct.unpack(QcowHeader.fmt, buf) self.__dict__ =3D dict((field[2], header[i]) - for i, field in enumerate(QcowHeader.fields)) + for i, field in enumerate(QcowHeader.fields)) =20 self.set_defaults() self.cluster_size =3D 1 << self.cluster_bits @@ -96,7 +98,8 @@ class QcowHeader: else: padded =3D (length + 7) & ~7 data =3D fd.read(padded) - self.extensions.append(QcowHeaderExtension(magic, length, = data)) + self.extensions.append(QcowHeaderExtension(magic, length, + data)) =20 def update_extensions(self, fd): =20 @@ -108,14 +111,13 @@ class QcowHeader: fd.write(buf) fd.write(ex.data) =20 - if self.backing_file !=3D None: + if self.backing_file is not None: self.backing_file_offset =3D fd.tell() fd.write(self.backing_file) =20 if fd.tell() > self.cluster_size: raise Exception("I think I just broke the image...") =20 - def update(self, fd): header_bytes =3D self.header_length =20 @@ -163,19 +165,21 @@ def cmd_dump_header(fd): h.dump() h.dump_extensions() =20 + def cmd_dump_header_exts(fd): h =3D QcowHeader(fd) h.dump_extensions() =20 + def cmd_set_header(fd, name, value): try: value =3D int(value, 0) - except: + except ValueError: print("'%s' is not a valid number" % value) sys.exit(1) =20 fields =3D (field[2] for field in QcowHeader.fields) - if not name in fields: + if name not in fields: print("'%s' is not a known header field" % name) sys.exit(1) =20 @@ -183,25 +187,29 @@ def cmd_set_header(fd, name, value): h.__dict__[name] =3D value h.update(fd) =20 + def cmd_add_header_ext(fd, magic, data): try: magic =3D int(magic, 0) - except: + except ValueError: print("'%s' is not a valid magic number" % magic) sys.exit(1) =20 h =3D QcowHeader(fd) - h.extensions.append(QcowHeaderExtension.create(magic, data.encode('asc= ii'))) + h.extensions.append(QcowHeaderExtension.create(magic, + data.encode('ascii'))) h.update(fd) =20 + def cmd_add_header_ext_stdio(fd, magic): data =3D sys.stdin.read() cmd_add_header_ext(fd, magic, data) =20 + def cmd_del_header_ext(fd, magic): try: magic =3D int(magic, 0) - except: + except ValueError: print("'%s' is not a valid magic number" % magic) sys.exit(1) =20 @@ -219,12 +227,13 @@ def cmd_del_header_ext(fd, magic): =20 h.update(fd) =20 + def cmd_set_feature_bit(fd, group, bit): try: bit =3D int(bit, 0) if bit < 0 or bit >=3D 64: raise ValueError - except: + except ValueError: print("'%s' is not a valid bit number in range [0, 64)" % bit) sys.exit(1) =20 @@ -236,21 +245,24 @@ def cmd_set_feature_bit(fd, group, bit): elif group =3D=3D 'autoclear': h.autoclear_features |=3D 1 << bit else: - print("'%s' is not a valid group, try 'incompatible', 'compatible'= , or 'autoclear'" % group) + print("'%s' is not a valid group, try " + "'incompatible', 'compatible', or 'autoclear'" % group) sys.exit(1) =20 h.update(fd) =20 + cmds =3D [ - [ 'dump-header', cmd_dump_header, 0, 'Dump image hea= der and header extensions' ], - [ 'dump-header-exts', cmd_dump_header_exts, 0, 'Dump image hea= der extensions' ], - [ 'set-header', cmd_set_header, 2, 'Set a field in= the header'], - [ 'add-header-ext', cmd_add_header_ext, 2, 'Add a header e= xtension' ], - [ 'add-header-ext-stdio', cmd_add_header_ext_stdio, 1, 'Add a header e= xtension, data from stdin' ], - [ 'del-header-ext', cmd_del_header_ext, 1, 'Delete a heade= r extension' ], - [ 'set-feature-bit', cmd_set_feature_bit, 2, 'Set a feature = bit'], + ['dump-header', cmd_dump_header, 0, 'Dump image head= er and header extensions'], + ['dump-header-exts', cmd_dump_header_exts, 0, 'Dump image head= er extensions'], + ['set-header', cmd_set_header, 2, 'Set a field in = the header'], + ['add-header-ext', cmd_add_header_ext, 2, 'Add a header ex= tension'], + ['add-header-ext-stdio', cmd_add_header_ext_stdio, 1, 'Add a header ex= tension, data from stdin'], + ['del-header-ext', cmd_del_header_ext, 1, 'Delete a header= extension'], + ['set-feature-bit', cmd_set_feature_bit, 2, 'Set a feature b= it'], ] =20 + def main(filename, cmd, args): fd =3D open(filename, "r+b") try: @@ -267,6 +279,7 @@ def main(filename, cmd, args): finally: fd.close() =20 + def usage(): print("Usage: %s [, ...]" % sys.argv[0]) print("") @@ -274,6 +287,7 @@ def usage(): for name, handler, num_args, desc in cmds: print(" %-20s - %s" % (name, desc)) =20 + if __name__ =3D=3D '__main__': if len(sys.argv) < 3: usage() --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292736; cv=pass; d=zohomail.com; s=zohoarc; b=OqKxSFHvNhRUJYdMDEai4TRRB+xSL8marggeIzrwcZfov3NN5pQcvqJhCOWMUBGJlUp65Q8FS/PTCETUY+qlL/DcsGc3I+ebn5rmjRfxbOLV184LVhdSMWiOSq3hMIP+25FVmnqTnZW2gSG+sLnhnbhQ/H+zXGT2sICywn/I7JY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292736; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tbOrX0FgQNjAy1iLtFP6KNkhnHFXfJ40KPJVDmw6zik=; b=Dweu1rrhM+ZNUiOvut03XS8IFwnW80WXPz0kgjNzvQJMwiSWx1KFr4xrxhyeVXQSksd+thSVeAwOsaDqq6BYTpNJYmqSwnjhogmI3zijLdGqe8auDJqeO3C2Ol2zVMqT9Km2B+i0Y2Tr5Q9wuvX59HVMMbHiPvpGxH0EbJEiJ1c= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292736859305.60445533650534; Thu, 4 Jun 2020 10:45:36 -0700 (PDT) Received: from localhost ([::1]:51592 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtvr-0000P3-IE for importer@patchew.org; Thu, 04 Jun 2020 13:45:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsN-00039J-1F; Thu, 04 Jun 2020 13:41:59 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsL-0005oK-Uf; Thu, 04 Jun 2020 13:41:58 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:50 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:50 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ocDdYMNoLj6ac5KbKTrYHq5WC+VAZ/pbfHwJPhpu/j9ZMikuKjhlcR8VvWB+K9pXqlMNMYWOA8pezQmaqiwoL6Jk30383YxdVuXVy7HG8zI37lW9og5QEQvhgo/0csFHW5O2h/WrEC9AHbm9mC3djVUKavxC7FpDKGrNiqhQffZJjY5m6AyY2XyH9yAsxWI//S0Z1J0ZuV/Tg0WVVyjJ1Lsh+88/guKmYF0dyfMVbjTRMbxSn+0kt1ZRukWqyQO4KZPMqBoYZ3u0MoGuYLqWufZReL9t8QNBcVxGG4JZOHXbnLnHrJ9TYX1uGp5llewIztDFkTgg65q3XGswbOXINA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tbOrX0FgQNjAy1iLtFP6KNkhnHFXfJ40KPJVDmw6zik=; b=P4PXtRMIQ0pJe5CE3XyBe+NzP/MmquYlXzZbpZiWpTz2+OCWGqt4EXTacARnPjUxPvL+K0U30Rk3SJzETO+Zy5JTK28w7Pug98Df+Ljmh8afvqG7Vfg+60hk/NvbMQ7QnFppO29agdkcStB1eKnWqIy+dE4Plo/ciOakUpn27zrgsVOh8H3EUG2R+2nxfWUr+k26OpKWbZjHTlViPuLltIELq65aTiC94K21p5VQj9sFxpJFhAXrDwX3Q99JmQ9MPOopl0dx4CTMgw5EiZYDe+/TBdh1skIb2Z2klPHEPlXRjT6iRrURLuTou/tRHafVocnjKtDTrKRxsUfTSmlHvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tbOrX0FgQNjAy1iLtFP6KNkhnHFXfJ40KPJVDmw6zik=; b=RYsXf5XDXndDTx/bn8C/+ckL8gT1lt9WDnjIUetmLg1ZrVIb3cH/Za2IxU5B1Vdcwf9ef+cDP324ncz3ZAj0e2H56aJkK8whGxWrHG/703U7qmQSoIG2ugBoanoB1NWuedMcZI0ffDF8J50F2U+YZ9m+0fUKEhBR68dhJRtm2l8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 02/12] qcow2.py: move qcow2 format classes to separate module Date: Thu, 4 Jun 2020 20:41:25 +0300 Message-Id: <20200604174135.11042-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5d32168a-b581-44b0-77c3-08d808ae8ffd X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:510; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PYlrGu0UIlQ72MzG0PYqK6+Ucq7pCkJFVsesZX+mHy77eEiIAbo5tuaVIXFLrFPpWObf+WOGYhVdVZScIrEGZIZil93/T1+74zfHn7V8/FjmPYW+8WXn13S0xjkrK+Jw8GilzeU069J/Ygd2ryP7es6q+RtCLxHlK2PO9I8/0vGQjK/QGFUbr9A1JhNFVv/JvdMZ7ZwAHEWi4HPE7FlBcIME6LfRdaP6e5pjvu+DSjq9hPC8pKKBJF7WWwUX/QyWOjJKn/IYqBhrQ0eEq+LE7sjrK0PIA8MxPyrxGYv2zJH5SYLrkJKFrjibKji2tfeWQtixIaQHxgfFG4Ix5os+YA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 6mMqTspX1zk3Cxx35ROhAy0XEZK54CZB1qn1bkb9yPQ0Jmfk6SqjhXI9d2L1Gx86mDZY4DHTwwhLPjgJBObHthw5/MNc7aKhGlUyDAIs1VRoWbkfTwK3Yd+JJLMMC8Wf8GfB2Vj1zDB8N/Z3Cd5x13mP+PQCmYwkuPxuYcefDDXbZ9UhOH+WvjBE53UZXWkd81u8zS/Oy2TYSX6EXRE3PsYifTF8NrIwjjUvQZug+WnOVHkb9WK1tbM+hye+QQOYF5GTabvP3IjJx5+SS1Edi1yJPzU7vyux5iOcFNpEyLD/XxGypPr9HeBx9wnxHXyJiVkAxdhgCqg7H1tA3LSHIssqyXcLBZt96/pJRnqfopopfo1wIN9jnb+/C5yhNBCyhvtAvuVxByTV/rh4BNsMkH/wspW2h//kvP7aj6C1FxUJTozWH5GWvUDi05qRfcL0eAT6Tc50YUzzCRXH+8o/P0XXUM1ozHurDanyI8rzn72mAHsmdXnw8JTDuk+1S/bs X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d32168a-b581-44b0-77c3-08d808ae8ffd X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:50.7921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VwPeX1HnQtQExGmTrvpo1dk2e0RWmWbDLxYZFVkFRpIwU+JGMA784jINMzXVl5973jclwDC5FFFB0inaeBp+WqmlqDj8ZY1LNj1rrA2tMkw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" We are going to enhance qcow2 format parsing by adding more structure classes. Let's split format parsing from utility code. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2.py | 161 +---------------------------- tests/qemu-iotests/qcow2_format.py | 157 ++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+), 157 deletions(-) create mode 100644 tests/qemu-iotests/qcow2_format.py diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index 539f5a186b..d9c41668fd 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -1,163 +1,10 @@ #!/usr/bin/env python3 - import sys -import struct -import string - - -class QcowHeaderExtension: - - def __init__(self, magic, length, data): - if length % 8 !=3D 0: - padding =3D 8 - (length % 8) - data +=3D b"\0" * padding - - self.magic =3D magic - self.length =3D length - self.data =3D data - - @classmethod - def create(cls, magic, data): - return QcowHeaderExtension(magic, len(data), data) - - -class QcowHeader: - - uint32_t =3D 'I' - uint64_t =3D 'Q' - - fields =3D [ - # Version 2 header fields - [uint32_t, '%#x', 'magic'], - [uint32_t, '%d', 'version'], - [uint64_t, '%#x', 'backing_file_offset'], - [uint32_t, '%#x', 'backing_file_size'], - [uint32_t, '%d', 'cluster_bits'], - [uint64_t, '%d', 'size'], - [uint32_t, '%d', 'crypt_method'], - [uint32_t, '%d', 'l1_size'], - [uint64_t, '%#x', 'l1_table_offset'], - [uint64_t, '%#x', 'refcount_table_offset'], - [uint32_t, '%d', 'refcount_table_clusters'], - [uint32_t, '%d', 'nb_snapshots'], - [uint64_t, '%#x', 'snapshot_offset'], - - # Version 3 header fields - [uint64_t, 'mask', 'incompatible_features'], - [uint64_t, 'mask', 'compatible_features'], - [uint64_t, 'mask', 'autoclear_features'], - [uint32_t, '%d', 'refcount_order'], - [uint32_t, '%d', 'header_length'], - ] - - fmt =3D '>' + ''.join(field[0] for field in fields) - - def __init__(self, fd): - - buf_size =3D struct.calcsize(QcowHeader.fmt) - - fd.seek(0) - buf =3D fd.read(buf_size) - - header =3D struct.unpack(QcowHeader.fmt, buf) - self.__dict__ =3D dict((field[2], header[i]) - for i, field in enumerate(QcowHeader.fields)) - - self.set_defaults() - self.cluster_size =3D 1 << self.cluster_bits - - fd.seek(self.header_length) - self.load_extensions(fd) - - if self.backing_file_offset: - fd.seek(self.backing_file_offset) - self.backing_file =3D fd.read(self.backing_file_size) - else: - self.backing_file =3D None - - def set_defaults(self): - if self.version =3D=3D 2: - self.incompatible_features =3D 0 - self.compatible_features =3D 0 - self.autoclear_features =3D 0 - self.refcount_order =3D 4 - self.header_length =3D 72 - - def load_extensions(self, fd): - self.extensions =3D [] - - if self.backing_file_offset !=3D 0: - end =3D min(self.cluster_size, self.backing_file_offset) - else: - end =3D self.cluster_size - - while fd.tell() < end: - (magic, length) =3D struct.unpack('>II', fd.read(8)) - if magic =3D=3D 0: - break - else: - padded =3D (length + 7) & ~7 - data =3D fd.read(padded) - self.extensions.append(QcowHeaderExtension(magic, length, - data)) - - def update_extensions(self, fd): - - fd.seek(self.header_length) - extensions =3D self.extensions - extensions.append(QcowHeaderExtension(0, 0, b"")) - for ex in extensions: - buf =3D struct.pack('>II', ex.magic, ex.length) - fd.write(buf) - fd.write(ex.data) - - if self.backing_file is not None: - self.backing_file_offset =3D fd.tell() - fd.write(self.backing_file) - - if fd.tell() > self.cluster_size: - raise Exception("I think I just broke the image...") - - def update(self, fd): - header_bytes =3D self.header_length - - self.update_extensions(fd) - - fd.seek(0) - header =3D tuple(self.__dict__[f] for t, p, f in QcowHeader.fields) - buf =3D struct.pack(QcowHeader.fmt, *header) - buf =3D buf[0:header_bytes-1] - fd.write(buf) - - def dump(self): - for f in QcowHeader.fields: - value =3D self.__dict__[f[2]] - if f[1] =3D=3D 'mask': - bits =3D [] - for bit in range(64): - if value & (1 << bit): - bits.append(bit) - value_str =3D str(bits) - else: - value_str =3D f[1] % value - - print("%-25s" % f[2], value_str) - print("") - - def dump_extensions(self): - for ex in self.extensions: - - data =3D ex.data[:ex.length] - if all(c in string.printable.encode('ascii') for c in data): - data =3D "'%s'" % data.decode('ascii') - else: - data =3D "" =20 - print("Header extension:") - print("%-25s %#x" % ("magic", ex.magic)) - print("%-25s %d" % ("length", ex.length)) - print("%-25s %s" % ("data", data)) - print("") +from qcow2_format import ( + QcowHeader, + QcowHeaderExtension +) =20 =20 def cmd_dump_header(fd): diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py new file mode 100644 index 0000000000..c7270a0a6e --- /dev/null +++ b/tests/qemu-iotests/qcow2_format.py @@ -0,0 +1,157 @@ +import struct +import string + + +class QcowHeaderExtension: + + def __init__(self, magic, length, data): + if length % 8 !=3D 0: + padding =3D 8 - (length % 8) + data +=3D b"\0" * padding + + self.magic =3D magic + self.length =3D length + self.data =3D data + + @classmethod + def create(cls, magic, data): + return QcowHeaderExtension(magic, len(data), data) + + +class QcowHeader: + + uint32_t =3D 'I' + uint64_t =3D 'Q' + + fields =3D [ + # Version 2 header fields + [uint32_t, '%#x', 'magic'], + [uint32_t, '%d', 'version'], + [uint64_t, '%#x', 'backing_file_offset'], + [uint32_t, '%#x', 'backing_file_size'], + [uint32_t, '%d', 'cluster_bits'], + [uint64_t, '%d', 'size'], + [uint32_t, '%d', 'crypt_method'], + [uint32_t, '%d', 'l1_size'], + [uint64_t, '%#x', 'l1_table_offset'], + [uint64_t, '%#x', 'refcount_table_offset'], + [uint32_t, '%d', 'refcount_table_clusters'], + [uint32_t, '%d', 'nb_snapshots'], + [uint64_t, '%#x', 'snapshot_offset'], + + # Version 3 header fields + [uint64_t, 'mask', 'incompatible_features'], + [uint64_t, 'mask', 'compatible_features'], + [uint64_t, 'mask', 'autoclear_features'], + [uint32_t, '%d', 'refcount_order'], + [uint32_t, '%d', 'header_length'], + ] + + fmt =3D '>' + ''.join(field[0] for field in fields) + + def __init__(self, fd): + + buf_size =3D struct.calcsize(QcowHeader.fmt) + + fd.seek(0) + buf =3D fd.read(buf_size) + + header =3D struct.unpack(QcowHeader.fmt, buf) + self.__dict__ =3D dict((field[2], header[i]) + for i, field in enumerate(QcowHeader.fields)) + + self.set_defaults() + self.cluster_size =3D 1 << self.cluster_bits + + fd.seek(self.header_length) + self.load_extensions(fd) + + if self.backing_file_offset: + fd.seek(self.backing_file_offset) + self.backing_file =3D fd.read(self.backing_file_size) + else: + self.backing_file =3D None + + def set_defaults(self): + if self.version =3D=3D 2: + self.incompatible_features =3D 0 + self.compatible_features =3D 0 + self.autoclear_features =3D 0 + self.refcount_order =3D 4 + self.header_length =3D 72 + + def load_extensions(self, fd): + self.extensions =3D [] + + if self.backing_file_offset !=3D 0: + end =3D min(self.cluster_size, self.backing_file_offset) + else: + end =3D self.cluster_size + + while fd.tell() < end: + (magic, length) =3D struct.unpack('>II', fd.read(8)) + if magic =3D=3D 0: + break + else: + padded =3D (length + 7) & ~7 + data =3D fd.read(padded) + self.extensions.append(QcowHeaderExtension(magic, length, + data)) + + def update_extensions(self, fd): + + fd.seek(self.header_length) + extensions =3D self.extensions + extensions.append(QcowHeaderExtension(0, 0, b"")) + for ex in extensions: + buf =3D struct.pack('>II', ex.magic, ex.length) + fd.write(buf) + fd.write(ex.data) + + if self.backing_file is not None: + self.backing_file_offset =3D fd.tell() + fd.write(self.backing_file) + + if fd.tell() > self.cluster_size: + raise Exception("I think I just broke the image...") + + def update(self, fd): + header_bytes =3D self.header_length + + self.update_extensions(fd) + + fd.seek(0) + header =3D tuple(self.__dict__[f] for t, p, f in QcowHeader.fields) + buf =3D struct.pack(QcowHeader.fmt, *header) + buf =3D buf[0:header_bytes-1] + fd.write(buf) + + def dump(self): + for f in QcowHeader.fields: + value =3D self.__dict__[f[2]] + if f[1] =3D=3D 'mask': + bits =3D [] + for bit in range(64): + if value & (1 << bit): + bits.append(bit) + value_str =3D str(bits) + else: + value_str =3D f[1] % value + + print("%-25s" % f[2], value_str) + print("") + + def dump_extensions(self): + for ex in self.extensions: + + data =3D ex.data[:ex.length] + if all(c in string.printable.encode('ascii') for c in data): + data =3D "'%s'" % data.decode('ascii') + else: + data =3D "" + + print("Header extension:") + print("%-25s %#x" % ("magic", ex.magic)) + print("%-25s %d" % ("length", ex.length)) + print("%-25s %s" % ("data", data)) + print("") --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591293000; cv=pass; d=zohomail.com; s=zohoarc; b=RwE1XdfDd5D9J0QJthyW1chJ0+iu0XRhVnCB8OvihpmZLI/ag7Sn1P4oeotdORITP8qbfJxhj0nq7/nqi/pzM1cKu2vRKj1EWW6kCNqTs9BCD4ygXVXmDsbmaH+c7NK1L8ppV4MXFq3dZI5aLZ7Powy6AOe4bvGNf4qTV3AR2tw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591293000; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=h72cIOwFcAvXsyXvShlntJjqindbpzVhggb0XZUMrFA=; b=LFFNnqn66f6YQ919XYsyMe5GbFGHAfmr+cpTfagLUiQI0la5jaHgf3R2ksZccrzAGc04gSniFFAmAWUweXhDwmIdWzIUcT+RmJR/1gd4DkCXrpboN2iusrJigWDTzBQLyvSBB6k3xVYL/RzQ6tIYWdyL0Y7MsHJ+zoN892y+ehg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591293000020689.7459316569835; Thu, 4 Jun 2020 10:50:00 -0700 (PDT) Received: from localhost ([::1]:39422 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgu06-0007SD-Mh for importer@patchew.org; Thu, 04 Jun 2020 13:49:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsP-0003Bm-Fm; Thu, 04 Jun 2020 13:42:01 -0400 Received: from mail-eopbgr80102.outbound.protection.outlook.com ([40.107.8.102]:37664 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsO-0005oz-4V; Thu, 04 Jun 2020 13:42:01 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:51 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:51 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h4J1WmWuAd9G3A4+blesiqRPppIJlgP1/kOsEGcap4aW8TXTv/aKsTGLSbeOYXwFAcy8xGC5dETRfRpMhgXP0NzlDf7IWGxnOIGJfTkX9XEpF9k+o0NfAP+TL/jNsVoxLxuuddTjpRF/3YdkeEuquc5cPneEbpZMesWraKiRg5L6/NboB35bKNG9jL8oTg91KNLHw5teuOo3AAaLN2R6zTxYBkx3SGm3Aw6dQGGCB+5494eWE5x1SzUs5wjHIaqY0HKiVHYjNX8AObGCDbPhDfShg6XW8oVe1SBqcrxRrw5+sMfnMhr5fM2MZGbmm8iGuWEIM73ih4EIlq0b899XEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=h72cIOwFcAvXsyXvShlntJjqindbpzVhggb0XZUMrFA=; b=A3MOOCwEWXSm0cDQNd1O5ZTfKQMOZR4TEv4luaHwZEBVeUyI3f/Vq/BQDvluuNwhU82AgtlPF45x5dz8g0ywWDAVyvD9v4Z7lV7Ep+gBIjJsuFJhDaj6Lm6TiKj07h5m7Ea9AZHEyJrXYTBkOOLTryNP6uxWHWPH8mvRvtwNHqFVWaz9mD70R+aYNIt20iRTSKoq4EQcToEvnX8Gl4JtS8AnwMmARzoAP+NVtt6720rMmR/25zU9BT9ee+hytfpR1N7UfFXSXXWqRlocR9M1iryuFzh9H4HbcYifqnB1cnw27n/950zicxbiF0G/ZTN50nKyEeOft0nfMivJhSOIuw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=h72cIOwFcAvXsyXvShlntJjqindbpzVhggb0XZUMrFA=; b=GLVViEPqaqt2WBmBEGPC8J+Az3y+xvnx2imEeYtSP0BMKfbUANWmWVN/a6/YPGCv2oxfYukJtvwHJfU+RYmcugb0qJ6YPNS/5ggSRjDQHHG68a2e7VAVwxeFuWLZzUn4uYGbeZAzGvxoy/Sf5sJh4hPGKy9mv6NQmBf5RN/Jjjk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 03/12] qcow2_format.py: drop new line printing at end of dump() Date: Thu, 4 Jun 2020 20:41:26 +0300 Message-Id: <20200604174135.11042-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08808089-2afe-49b6-7c15-08d808ae9075 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2043; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zMfktcIqnneejpoS2C29EsxNGI5Y9METyGjApZaXEQXK1edEtNtH5axOYUPqPevVEKy3vokMDH6KpbsqxgTwVt8+bxe0oByRAifquMQAuxgjLoOHWqBNpQdBTA8WJSXYmE8lwOSvdPM/t0op9IdEuGuQ0JpGrBNnycz9ZdziAHGzhVOIZ9T0v4ay2GTeH/EYlhxRRFx4UmFSM5OwAhMJUUlZhARjwRZeu/mg5MI2zzOeCwLR3ehhORC9ARa4NQxXQqwyvEEJ5f4kAlRQtH5FW4p6ojMm5oqCe/IhDonrzwvBbaMLpm22SZt+RvnQgXYqrQ++nPG1kjXVhFWpqoPyjg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(4744005)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: m0hkva1gWC7XvzPfizZr/43bTB1+2jD47xwtC4op2n3GOMkhwK6Nn0e7pBirJ+0MW/xS0B9k5QHI+ejSQnr46PmCAOT43u+gpe3wWE/v1ZnTBy9+LRBwe0EIH4snJ+cnw90t0hYFPwMryHKyOuk/GwGROrdmUU8AYgpD81Yvzl0JaVlYvaFoBGc2MMmuyVyeaYA9RvO6JMSmEqcAxXvUq757hxkFrME8r8wkB9LwqyZp6qMmmKxyBgsvlyF/Vj0jTSeYmEN85BH9Wlf4hgkTDyOt94JzA0U7h5jjIZwqyB6Wc1ZldJ6gKz3MEMBnUBfJL5+W5tYYRj8qntCgdp1rzl2rZPi7RQmg/CHu1lHtwKH8DrA+0k5V1MVY2kheoyU1kxETSgzJ7Ii8bKYkyb8ZBfTO1FjPt3LGaVzyCiyy+vbElw1KekPvHXFEMSJSfVfGWjYhV0Os7/SUZrbVH3taJJFujJnDCXFHOwxsoP6XVuZ8FKCT4mGf92fi/CQ+dqyn X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08808089-2afe-49b6-7c15-08d808ae9075 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:51.5478 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2j7GcZ27g6I+1ax9FH4FKd0FUxWIEHQJsHrzBuyLjwDLc+kPzyievjaUmDUxajRAtp8ZDT6xauUDTXZsTQo5wyWrOA/0qWX9ehkgVrP38ZM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.8.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:57 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" This will simplify further conversion. To compensate, print this empty line directly in cmd_dump_header(). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2.py | 1 + tests/qemu-iotests/qcow2_format.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index d9c41668fd..79db81b040 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -10,6 +10,7 @@ from qcow2_format import ( def cmd_dump_header(fd): h =3D QcowHeader(fd) h.dump() + print() h.dump_extensions() =20 =20 diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index c7270a0a6e..99e5248e73 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -139,7 +139,6 @@ class QcowHeader: value_str =3D f[1] % value =20 print("%-25s" % f[2], value_str) - print("") =20 def dump_extensions(self): for ex in self.extensions: --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292879; cv=pass; d=zohomail.com; s=zohoarc; b=QYbUOxuyKGM5OfstnqZa+s8BeKPruCSWbfRA4cq1VTCfaGEUFugkMN7L/wkqluwHdEv9LAA8jC49cuFkPChg/Nw3PsupT8/Vv1oiXHu6hEvRAimdLgSpGOzYuzo8InM+/VWYk8dNXshCiTzPyOFNcfXVspCxTyJKHlS2uqsh+xs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292879; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YRY4YW8JNkMvjfJ2rapnWPP4AdsS3y9ldVH+VQ8hmEs=; b=IZdfBVMp7dw8Yhlq5N09ysG0R+nsSkdqU/qm9OUeVzDIEuK36kPsUB7t9YzUqadf+C0g4zRXlwWwF20qNMYOtUsQh5EiGuSDgptQWkbENBZTf2zJb5/PZqH+gSNZBJCVYKkQcBoYkkC1kfXLr4d1OkV5jogHJVjLIvqjx4xK+dQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292879961212.08770728267882; Thu, 4 Jun 2020 10:47:59 -0700 (PDT) Received: from localhost ([::1]:60146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtyA-00041l-FI for importer@patchew.org; Thu, 04 Jun 2020 13:47:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsO-0003AI-5H; Thu, 04 Jun 2020 13:42:00 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsN-0005oK-Gu; Thu, 04 Jun 2020 13:41:59 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:53 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:53 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=REQyw6cf4RelmptDU5ugZqfeOYOQq5G1pV0rB81BDtnp4yuUGggrgotSNaOnLKrNOgXDnvdB2R8XQVQTUUgIm96yZEHN2Xi3fuDsc//NMmrrhAoILqL+6XHRA2LrfHjI2x2Q6zvV117bQouM919pM/6+3TKO7yQTDsX89KUJdMiK11GWIT1H9teIthFtYUV098DbPIUBCVm3eIl8vBRyZb+QrDkWeVmWNTDvHwXxnA5PLX/VoBH3jRZZmAG9CmDDNlGtReMtCa1YwGGbOLvHYMbhsHdda6BtC2xviW8MuLtlRbZebPvLVz1hD6pjxekYblVFyhVVnTNFCvq8SR9TWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YRY4YW8JNkMvjfJ2rapnWPP4AdsS3y9ldVH+VQ8hmEs=; b=YdZeR2KSbcFtKNy9el7GDLH6e9Lh676v0SsG4LhHcIdNhcd/L5KSH4pZs7xspp1obCWlKoSK14ZZFKuoRblQRMZ34YGq4lsm+pcp97ixPpcuUWckUBMU32058y5b+AP3i22FdM2OSPc3Xis2iCLizHj1I3BhzwxeIvA0N2igcLORQtetWnwPLigtJCRkeAN313bfY+eepzFy1Q6ziiqDrSPxu5Q6L3iaxVNZ23jMlJEPYInDWxwx9zX65IJWKdAlcFRB+68cHPtTZZnhz+kgfXhHE3gEaU5DG1xAvbIg/05chCgYzE24Ajz5f79k3nqUcPZrG1WFSF8PZV8uHoTddw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YRY4YW8JNkMvjfJ2rapnWPP4AdsS3y9ldVH+VQ8hmEs=; b=KOcdXE1XJP2Z2NOsz8WQ3k3pWqo5hbKa+U0AmhTGP5sJNkz6mweR11WYpDRD5EuJ0SQyV9+h0oX9LcJklqjIhtmRbAMvD3EpjfhrjdhQoho9uFm+TKVEuKZm3Y7civu/BU0MDurfKwyg04Appw/HFqlZFwowXXa8MCOtcMvpXiM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 04/12] qcow2_format.py: use tuples instead of lists for fields Date: Thu, 4 Jun 2020 20:41:27 +0300 Message-Id: <20200604174135.11042-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bad0ecb3-6fa1-42b5-aa3e-08d808ae90e6 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1360; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eCjfnvQOsdrki/ug7C3U8aemU96jxWIjXA0cYJybO/B7AbRJsFg54vqYCQvhfz0sRHTtq1d/aCZ/d0plsWtBJi1MwmEfnap8/G0Ae9GvoTuwqhYB09SXgXp6i67tWg39L86VtYjIwei0/pcHqzqCGL3foYobTWBS31HgWHJTMrxIFa4lMxbroSVuvFQaKqob5fRqtNjFd+d1vMMKpIjmnRDedwNihzVfYBOBBdt4BQBxVs9WjyrHDCKronhhBPlZWfuJ8Vl/B2GOuQdlL/vUJQ+1ICy32VRcdKiHpUEXcy1Xr6Mxu3cjn5+4fhmPWnlaNjws58Yycm9T8FLjRbdCBw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 8JwYUe2TfG5AO5+W94RC0SQTEbcO1Mu6iNdvFk6rWVhwfDJD/RxJFQSoT8ZobWj9z24NZuD8e8Z8QVIh8lWJr46Mp3J4HiSwYaUEaODjGFnri2mi9VwgFTFsLragANwY9YGdfUPKmQp3PAEJC3wLeDgMjLp5k58StzvZaGkHQb88VyGVInrjz2nydJSOVY0aGD646jrjnkJrMVkZSwSUigZOwmzEzCwA+TikX9Q1ddjVGZup1o0fW3K/Ai40iGAeucZ4mgX1kzygPVLims9EQxHtV8/H28i3dJlyfuSwAbYbl+ZWLxmLBXWQpyJl+yNaFe17/uwpI/77/044NNeIc9afvS9/ua06XbkNKXbrgCn69KHM/UM9Wh5w3WbzDkiU6hUTVvD+JDidWGAEVv6JcBxfpLPeWKoIBN7uAnt7fCJLWztzrk1Epx+tX+lNCMVg+lN6B3FLxowTQBwSqZQ1CKe3dtXsr9vkHiTgnApA8DkuouiZIw++Al8lUPBxwg4R X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bad0ecb3-6fa1-42b5-aa3e-08d808ae90e6 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:52.2965 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Xn4wwH9pOs3fapQClZWrYx9oHzwmqa82XfV0l+INYGou0d46GQQoImU5Le1sOnPQECULp9niwI59opD3nP68tBZX+3prN7LPU52mGyUy61g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" No need in lists: it's a constant variable. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 99e5248e73..5d242c4aa4 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -23,29 +23,29 @@ class QcowHeader: uint32_t =3D 'I' uint64_t =3D 'Q' =20 - fields =3D [ + fields =3D ( # Version 2 header fields - [uint32_t, '%#x', 'magic'], - [uint32_t, '%d', 'version'], - [uint64_t, '%#x', 'backing_file_offset'], - [uint32_t, '%#x', 'backing_file_size'], - [uint32_t, '%d', 'cluster_bits'], - [uint64_t, '%d', 'size'], - [uint32_t, '%d', 'crypt_method'], - [uint32_t, '%d', 'l1_size'], - [uint64_t, '%#x', 'l1_table_offset'], - [uint64_t, '%#x', 'refcount_table_offset'], - [uint32_t, '%d', 'refcount_table_clusters'], - [uint32_t, '%d', 'nb_snapshots'], - [uint64_t, '%#x', 'snapshot_offset'], + (uint32_t, '%#x', 'magic'), + (uint32_t, '%d', 'version'), + (uint64_t, '%#x', 'backing_file_offset'), + (uint32_t, '%#x', 'backing_file_size'), + (uint32_t, '%d', 'cluster_bits'), + (uint64_t, '%d', 'size'), + (uint32_t, '%d', 'crypt_method'), + (uint32_t, '%d', 'l1_size'), + (uint64_t, '%#x', 'l1_table_offset'), + (uint64_t, '%#x', 'refcount_table_offset'), + (uint32_t, '%d', 'refcount_table_clusters'), + (uint32_t, '%d', 'nb_snapshots'), + (uint64_t, '%#x', 'snapshot_offset'), =20 # Version 3 header fields - [uint64_t, 'mask', 'incompatible_features'], - [uint64_t, 'mask', 'compatible_features'], - [uint64_t, 'mask', 'autoclear_features'], - [uint32_t, '%d', 'refcount_order'], - [uint32_t, '%d', 'header_length'], - ] + (uint64_t, 'mask', 'incompatible_features'), + (uint64_t, 'mask', 'compatible_features'), + (uint64_t, 'mask', 'autoclear_features'), + (uint32_t, '%d', 'refcount_order'), + (uint32_t, '%d', 'header_length'), + ) =20 fmt =3D '>' + ''.join(field[0] for field in fields) =20 --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292745; cv=pass; d=zohomail.com; s=zohoarc; b=d17EWn7JjXbZx56JksWXhsiJYdptAVPlulMtniWe6suRvG6Yp1yyod2S4SK6eDs7g8whNJhtp9JWzXJCp+6dRT98UQ1lzDFbI4jxtfdJjbr6wOWrcerlSFvYPmwKuqV+c1O4zLrOrR9wAcMtvcXzdHl6Ko8D4aLmd7gOn57BXzQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292745; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=oGybkWWVF1Xcj5WVjNeBa1f3oW6ST2V+BjS3SgXIidE=; b=IZguCgzfX/+6CVe0Gi36jUwQIuf5z4qnoirW7iL9mya/j2O4vpUpVsP/me7+zaNyWQSLY+/mkYIPm7sg6QgSEB+tLS9xN3ddwgMN8QUdcbuq1T4qajV/r5sU3tG/GV2ILWC3UnBhRiHM+WfzKdrGC+sAApCm6W0iL18qaPHq3dQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292745816893.1402296796342; Thu, 4 Jun 2020 10:45:45 -0700 (PDT) Received: from localhost ([::1]:51744 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtvs-0000So-QP for importer@patchew.org; Thu, 04 Jun 2020 13:45:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsP-0003BK-BX; Thu, 04 Jun 2020 13:42:01 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsO-0005oK-Kc; Thu, 04 Jun 2020 13:42:01 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:53 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:53 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bww4OA/4008R7XEh3RHnPG0Vkx6nCDH4TpvIrj/pvRmP2Wx7j1BMC/9RucxMul++/QO+T719yrIJtsBlR39UsysZvSz6AfHPSrDwL3lVGJ43/Hl/i6bQ+Ags6Da91XGm83LrFtDWTIPVt6+3XXHnvtlwd3TiCo1wTvxQAV4ri5G2swm79OCPw5mlJAtttkEzh4ViqRURQHiBKVuITUTnUMCwzuG8c+SmG3VppIDioWUZPVmepACXLc5AZ0e6d+WjAnmdGBDjqwHMtfrWsnvTyI9tsDuQOeXTyBt3rpI1AnMMck66EniqX7beDsW4br8apX430or/8f0uhYuW/cMBsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oGybkWWVF1Xcj5WVjNeBa1f3oW6ST2V+BjS3SgXIidE=; b=IgtaZA8IuWOob2oIJwafxonrGzcW7kH8Al1/AVb6fsn1TO1tdd3xGmnu38jyZANvjNoiL6s3hnEkU6ifCFP8qgsRC2WPJoLaTNEhQpyrNB1G0SsfF8HY2NQG4v3ZqfrKNaEblcYHG+O+SMRtI+zHncW0ae1fwrSF2BgWAxEJWro+dxW0PS1dYPNg03PLcJcusRH2QUUt1K8bjNem0+8pKLjoC3LQ7HhncUGGcO6VOZZQSBWjlIa/gjxRj3qcsGEFq/mZGqki9Elmm4fgHBWIiUZcQkMQexUD7miRANsqSqhWaETJP4AIr2eSjUpcQSltRoBYnJ9uGUaMeTgn6b6Yfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oGybkWWVF1Xcj5WVjNeBa1f3oW6ST2V+BjS3SgXIidE=; b=lgAU6sM6Tq6CcnXhrBGLJ042mF5HVsLuFosIMj6MK5Tjuyg2bAP3Uq0j64fkYemXtzc+zhwU6o4Yi4QVn+t6aq0fNu0fJwpkT459viK8X+c2x+tx7URYSyWmTuUgiEGVoXEDVYy9jhleBHBPElzOToRU6Y1BpUuZz7bExq++kgU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 05/12] qcow2_format.py: use modern string formatting Date: Thu, 4 Jun 2020 20:41:28 +0300 Message-Id: <20200604174135.11042-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9eea5338-ef77-4c9b-bb61-08d808ae915a X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:800; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U9kUAZdM3lQhbHAFNtcWoHECwEnciYn0BdmEpoIBwU5pKfxKuwptzUqgWJlbdB0Jw3KyLKKjLWCGWra/AcmVMDc0BuwlL0Ie03ILWpQTnIAzxB+4NmUVF/fdZqmGbwZajAanwmN4qcMr9C3Er7N0pIienf0nCo6sBc/kp77sEzRgYti8dyxsWZZEdGFol3b1mrjBJhQZdrGYXox4at7fhcvf6DtnYsOkMwc3BqVI4i4f8jyeqpJgrt3xPgozxl640f4vr7BrxdYN8nvz6tiijBOiAZjFv4KmOhg49DpZN3y2Qo4CQaivAf1KCXtoQ94N6zNgg63NmUhKbnLKLKMlag== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: SJbDrFv01ay9sIdc2zPEnMLGmm4yZxnxduL5vsNv3+GsF6mnBZZ1oYgHeafk+UQkbKGRoiuhMkX8a1UTvanSrM+5TL1lwtsTrJVKMMEWTd+ECpNLJmcNl7FA9c0m1WUhuupldeBrWuCp4OFtBEysHxjwhQUs2hMtyguGUyIFtIgqyG2kDmiWjrd17yMZKsyMG7D5rncWDvWBCKzCSlxC9qLg7eSKCc93R26QalF8tj8IKV+kOnV58WZh4IZmzfQ4wVwyLTVgO42MgONahZpJbHWdjQPe+EW1LMBMpDRFtZaRiHO3ipdlX0ztC1NeTinAO9mMJWaenElbB/RxzagueZDJApCZVTD018Ue1GCaKggoz3lMIKfLWx6T3BRQ1bQaHyE6C1+eesFmkYD+2VOWSHGPxfzKJpl0OdXFbp/VptVtL/hWxq3YIUY6MOKVQpOiPh8IOP5ykUx0yCFMy4WcYF1l/e/z98Hiyxj4umyVMlxiSorl1aWYvdUwjrB4ctKD X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9eea5338-ef77-4c9b-bb61-08d808ae915a X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:53.0661 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WSHbme0pSuHLqpgioW15he0JXqMeuakWAGWWT4eRrE2XtgxsTDaZO+zFMNoTwethtXYGxAEl/Wd0WF+NC7Jf/Gp0oi3UY3iIfqp15jRkTxw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Use .format and f-strings instead of old %style. Also, the file uses both '' and "" quotes, for consistency let's use '', except for cases when we need '' inside the string (use "" to avoid extra escaping). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 54 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 5d242c4aa4..80e7c3f81d 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -7,7 +7,7 @@ class QcowHeaderExtension: def __init__(self, magic, length, data): if length % 8 !=3D 0: padding =3D 8 - (length % 8) - data +=3D b"\0" * padding + data +=3D b'\0' * padding =20 self.magic =3D magic self.length =3D length @@ -25,26 +25,26 @@ class QcowHeader: =20 fields =3D ( # Version 2 header fields - (uint32_t, '%#x', 'magic'), - (uint32_t, '%d', 'version'), - (uint64_t, '%#x', 'backing_file_offset'), - (uint32_t, '%#x', 'backing_file_size'), - (uint32_t, '%d', 'cluster_bits'), - (uint64_t, '%d', 'size'), - (uint32_t, '%d', 'crypt_method'), - (uint32_t, '%d', 'l1_size'), - (uint64_t, '%#x', 'l1_table_offset'), - (uint64_t, '%#x', 'refcount_table_offset'), - (uint32_t, '%d', 'refcount_table_clusters'), - (uint32_t, '%d', 'nb_snapshots'), - (uint64_t, '%#x', 'snapshot_offset'), + (uint32_t, '{:#x}', 'magic'), + (uint32_t, '{}', 'version'), + (uint64_t, '{:#x}', 'backing_file_offset'), + (uint32_t, '{:#x}', 'backing_file_size'), + (uint32_t, '{}', 'cluster_bits'), + (uint64_t, '{}', 'size'), + (uint32_t, '{}', 'crypt_method'), + (uint32_t, '{}', 'l1_size'), + (uint64_t, '{:#x}', 'l1_table_offset'), + (uint64_t, '{:#x}', 'refcount_table_offset'), + (uint32_t, '{}', 'refcount_table_clusters'), + (uint32_t, '{}', 'nb_snapshots'), + (uint64_t, '{:#x}', 'snapshot_offset'), =20 # Version 3 header fields (uint64_t, 'mask', 'incompatible_features'), (uint64_t, 'mask', 'compatible_features'), (uint64_t, 'mask', 'autoclear_features'), - (uint32_t, '%d', 'refcount_order'), - (uint32_t, '%d', 'header_length'), + (uint32_t, '{}', 'refcount_order'), + (uint32_t, '{}', 'header_length'), ) =20 fmt =3D '>' + ''.join(field[0] for field in fields) @@ -102,7 +102,7 @@ class QcowHeader: =20 fd.seek(self.header_length) extensions =3D self.extensions - extensions.append(QcowHeaderExtension(0, 0, b"")) + extensions.append(QcowHeaderExtension(0, 0, b'')) for ex in extensions: buf =3D struct.pack('>II', ex.magic, ex.length) fd.write(buf) @@ -113,7 +113,7 @@ class QcowHeader: fd.write(self.backing_file) =20 if fd.tell() > self.cluster_size: - raise Exception("I think I just broke the image...") + raise Exception('I think I just broke the image...') =20 def update(self, fd): header_bytes =3D self.header_length @@ -136,21 +136,21 @@ class QcowHeader: bits.append(bit) value_str =3D str(bits) else: - value_str =3D f[1] % value + value_str =3D f[1].format(value) =20 - print("%-25s" % f[2], value_str) + print(f'{f[2]:<25} {value_str}') =20 def dump_extensions(self): for ex in self.extensions: =20 data =3D ex.data[:ex.length] if all(c in string.printable.encode('ascii') for c in data): - data =3D "'%s'" % data.decode('ascii') + data =3D f"'{ data.decode('ascii') }'" else: - data =3D "" + data =3D '' =20 - print("Header extension:") - print("%-25s %#x" % ("magic", ex.magic)) - print("%-25s %d" % ("length", ex.length)) - print("%-25s %s" % ("data", data)) - print("") + print('Header extension:') + print(f'{"magic":<25} {ex.magic:#x}') + print(f'{"length":<25} {ex.length}') + print(f'{"data":<25} {data}') + print() --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292699; cv=pass; d=zohomail.com; s=zohoarc; b=dTG1UOJEaQKXG6yM+jsp7bMmvraupsjjb8x/oZbzXBHrofHJfUg+fbDJlukl7dXe1MsozdGGxy8IaCt7Hbm15ZU5IHZ78SjBkpBKgLlzR7CFqy9+LcBWGz2HMkx2OmjplK3C1h7xl4W3uX/jthZukCmjN6CH8mMa53ie7Oi2dF8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292699; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QenxGvaEKfRv5eO84BLY3ff+Cj9E2+GrqCrw6ue/Jd8=; b=I5zjygnabe1I9XRFIE7zim25Q4n0ZMXI73owyQ5+YD94aWztq3O1d0FgZXiZBzSVa66PUPQ5zPf5qsyN+O4SjfcfC4OjSvQfb7QeawColN0LsBsJRJRlYYJohjAV0RgVndCANfypkU5TYtHjFcW+K5S4Kdi2cwo8bp/2MW5PE6Q= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292699626491.78566003805076; Thu, 4 Jun 2020 10:44:59 -0700 (PDT) Received: from localhost ([::1]:48420 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtvG-0007Sy-5M for importer@patchew.org; Thu, 04 Jun 2020 13:44:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32848) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsQ-0003Dd-KX; Thu, 04 Jun 2020 13:42:02 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsP-0005oK-Rv; Thu, 04 Jun 2020 13:42:02 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:54 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:54 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qw/aDzGCm6bY4GF/seq85HV2Lrco/x7gb7XuEAv0Eb1TObWsxWm6pbm+JPm91qNQXoDBk6D9+maVe3ntoqL3Ug4Cb8SG76H+/YT+EPPOuH2PzwcwTsgslEDOIpcJx8FvWZxh9cCfTzuGgM64rxuY5E/gFXWqedVX9iNm2z6WVzOqzDijmZ0jjUDHzAF8V3Tp3GhFKhkZr+wFqaS/jRiBTKz093GjY6Jd5yW86eNu4ztDxLXbPoQVbjcWfuqMt0eKhI7RhHRowBp8+DpW7i1q5U0v0HJ6ta7aLhmaiszQ5/A/NR96NtiNYocDdix2DkmM0RwZTX6szU03rTVpLCbLZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QenxGvaEKfRv5eO84BLY3ff+Cj9E2+GrqCrw6ue/Jd8=; b=R2fkBDdzQHdiK4t3hVpOcP5VfGAOX0qEmRVxWd16PipdoW2SKC6i188TMkuZJkVugSBlx4d4lLo+cmwNHjwY4t9VdbFGqEYNI/yOgT/N+6rSVp0rJf4Ho5kCeePTvPRTsTif7Gxqju2xAiNQwOtIaIIpaI+kieDqSMVBie3CCCU0LoWVrijzlDJhzjMD9IJ+Uk6uchh54CXFTWnegBniYNPS2w+sf7lr8CRgNjhDWO7CFfi7YHI5p5INVYFBE705xUbkkMeOHEjcvMdO6GeyvlZ4sAQ1HGbXiQdUHw1x+zV60Fpqp/rHHXyxTCV7PcpE2IjBDGBaAedcHvqK84WSUw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QenxGvaEKfRv5eO84BLY3ff+Cj9E2+GrqCrw6ue/Jd8=; b=qm6tWEV/ZTjMPRifFcR863bCGpnn8Ov7GjnGpyOYvo6mbDyYEyM57khycnyLEJWnb6pqMx6jATwCZNUk9YdETPpbh5UggcNFOwiz4OBHDdSnEKF8nkoqLskq0fH10Fd6ICXl2w6sqVxD+BIwD8KAsxr8gXnDQdqHB5u+9Drtjd4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 06/12] qcow2_format.py: use strings to specify c-type of struct fields Date: Thu, 4 Jun 2020 20:41:29 +0300 Message-Id: <20200604174135.11042-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d6718923-a519-4cec-ea83-08d808ae91e3 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tNNR+V6WqDAAMp5TfK4RDw1KlH0gZEKo4Zb0V2Md0nwRj0hIKt3Fun+VWVGVlyNTB1suQAEsRXxE7irqCswRnjGKsEgnnLrBreIgUy17TCb2l025p72Bqtu0FMytiN62r6q41IcjNHcdqPwUxENa+NyfAC8F3BoxUztogdT94BKDiWhA9ls2Mo5JCv/4qiq9717/bKEZLBx+Ne2hgWC2iUK0fAffz5pymck90jFpvEUzqzMLCFuG3oFfufcWAqbEjdB740BSijtoSAzgr8gZjZh0SakbCTlVmeQyESZy0lAIw07DXordD7Z9Usw6INR3 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 0rGnxjEdFx8C6NH8QeEVYhSVxWCFfVvmVtx1cIRydXeev6BhXLjJIk/XawE4pAFXeQ4TgvjnJQpQ87f4qll9NGE5qFQOpWRwdI2OExZaPj3U07/BM8OIpptrUhu8ICoCHXQs6IsxzOuXAxRI4r+ADOt5Fuvl9P4bPdaqtSgvnKF9NXi5i//D59I2B3OkLjZtlnyEzIgG4Vc2XNz0cJVInLEWTdg0u8yGwoUcyiC20AIxCZQb97wgwxkSFWo815LoBWlld+ZcKrxTM2rFNI7UfPLo1v7xDdeftJA1hg1XfUWSYfCi1aewFgBDAIEob15xstLTgj5rumtskpjkPvt4JF0QtflluXjYi2W3jyMPKixGExAEkbNwhSso+oQ2HI2oibKlGzyfoP5teKgTF1P2YlY2HqTMi1vXYgbpZEK0mQ6yRP+/ZPUjN2wblzYXNCknE1L3m+09I1mjs5ugzO5ArY9rLkbArjMxQzO0Errw5jI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6718923-a519-4cec-ea83-08d808ae91e3 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:53.9472 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ErlX7S87X1HJeVr0KMSv+yh6Fa65fFdcXjq9rO+W1T/EqE/2OOtZLX2AXx81oWYJKnyqRnAtIV3VZLmAE66/bCXy0rklp+CavR5noLihRn8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" We are going to move field-parsing to super-class, this will be simpler with simple string specifiers instead of variables. For some reason python doesn't allow to define ctypes in class too, as well as fields: it's not available than in 'for' operator. Don't worry: ctypes will be moved to metaclass soon. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 50 +++++++++++++++++------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 80e7c3f81d..1fd9473b7f 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -18,36 +18,42 @@ class QcowHeaderExtension: return QcowHeaderExtension(magic, len(data), data) =20 =20 -class QcowHeader: +# Mapping from c types to python struct format +ctypes =3D { + 'u8': 'B', + 'u16': 'H', + 'u32': 'I', + 'u64': 'Q' +} + =20 - uint32_t =3D 'I' - uint64_t =3D 'Q' +class QcowHeader: =20 fields =3D ( # Version 2 header fields - (uint32_t, '{:#x}', 'magic'), - (uint32_t, '{}', 'version'), - (uint64_t, '{:#x}', 'backing_file_offset'), - (uint32_t, '{:#x}', 'backing_file_size'), - (uint32_t, '{}', 'cluster_bits'), - (uint64_t, '{}', 'size'), - (uint32_t, '{}', 'crypt_method'), - (uint32_t, '{}', 'l1_size'), - (uint64_t, '{:#x}', 'l1_table_offset'), - (uint64_t, '{:#x}', 'refcount_table_offset'), - (uint32_t, '{}', 'refcount_table_clusters'), - (uint32_t, '{}', 'nb_snapshots'), - (uint64_t, '{:#x}', 'snapshot_offset'), + ('u32', '{:#x}', 'magic'), + ('u32', '{}', 'version'), + ('u64', '{:#x}', 'backing_file_offset'), + ('u32', '{:#x}', 'backing_file_size'), + ('u32', '{}', 'cluster_bits'), + ('u64', '{}', 'size'), + ('u32', '{}', 'crypt_method'), + ('u32', '{}', 'l1_size'), + ('u64', '{:#x}', 'l1_table_offset'), + ('u64', '{:#x}', 'refcount_table_offset'), + ('u32', '{}', 'refcount_table_clusters'), + ('u32', '{}', 'nb_snapshots'), + ('u64', '{:#x}', 'snapshot_offset'), =20 # Version 3 header fields - (uint64_t, 'mask', 'incompatible_features'), - (uint64_t, 'mask', 'compatible_features'), - (uint64_t, 'mask', 'autoclear_features'), - (uint32_t, '{}', 'refcount_order'), - (uint32_t, '{}', 'header_length'), + ('u64', 'mask', 'incompatible_features'), + ('u64', 'mask', 'compatible_features'), + ('u64', 'mask', 'autoclear_features'), + ('u32', '{}', 'refcount_order'), + ('u32', '{}', 'header_length'), ) =20 - fmt =3D '>' + ''.join(field[0] for field in fields) + fmt =3D '>' + ''.join(ctypes[f[0]] for f in fields) =20 def __init__(self, fd): =20 --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292898; cv=pass; d=zohomail.com; s=zohoarc; b=MFRsNSAIZeANRMUZW4ke7N4o1Sc2IUNdHMojkowEY2Anvb3+DOA0BZcjXGmecYLhhp5kd++3RgEMOSl5AoAi4GpUEgvbeNK56lGDeMRQtJvtE4DTR4s8IYmlJOkOHApxj/q7Z6zd0otW0z6z+8BDPXWbQmSpdZm0nzDDeQ8hFEw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292898; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hgLtXa3WJzuTkOEj3BfqfIOjZ/gcOiyZAtf80ZmSGE8=; b=ipMYUUHU9hhFDM1GWCWBlrXOTH6axqmSms3QuZBV6v23WAitGUChUPF8QBy/cvt+vPnh3gxg6aVvbKz0zL0efagIUdEvdFFmmYv89PQgvYYm3ceZfA6GT0Ky4uKDX/UCA+i1xlvHeDCxb3kdTJ5xcaqQsxcJF2zDrXwdK2PJv1g= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292898754900.3302365409932; Thu, 4 Jun 2020 10:48:18 -0700 (PDT) Received: from localhost ([::1]:33454 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtyT-0004h5-BE for importer@patchew.org; Thu, 04 Jun 2020 13:48:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsQ-0003E3-PC; Thu, 04 Jun 2020 13:42:02 -0400 Received: from mail-eopbgr80102.outbound.protection.outlook.com ([40.107.8.102]:37664 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsP-0005oz-WE; Thu, 04 Jun 2020 13:42:02 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:54 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:54 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n/ZJAJaM3oF4hv608ONNePCAvM5qIa3acHqyQT24uIbzXRiEHeZOoIcZnCu2u651QlHQ2TlsxUZ/wIGet+pY24h6f9RSjxgLRmjCoTXETdsLYdGB2egQiLyu8k72Zp7kpYxqzlw8bTb0bRhhsxTQ+NH+KtFie+T57tzBWXENX37Strc0L4v3V/+yn9X8alCt/xrp74jqjDeNpRDnsdKgMN1mvL20UTT/pJU/ryeRNCOZyTF1Zhisnsgs8n2I36sh265KyzelI8K1lBLPuslH8kFz2oFfM5p9QTrh8uIstJ2pN1UkCFv6Qbw7kZcakX91faOZb85bY6TaxcFLXhpLGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hgLtXa3WJzuTkOEj3BfqfIOjZ/gcOiyZAtf80ZmSGE8=; b=cw6p289FRByzoPQrn5t16FNF2vZn8RHgFhykciTtL4bR8ZOZqqjCkiZXCLarjQ85r6lp3KQ1o2dPKVZutoStvb+su7beyRmPIitFVKK4rnNoz4ue9+w4t7MBccoIxmjel8JQ/oIBNFLS3t7cL8LP2Bg2vYX8kdsT56YaTOsmS1BwAhgqOeB2+5hRe2d6S1pPzRyyORwcHPLdDNu3UDu/zWbtheSyq1xHsW839nbnIWB0lgxItsvqvzS6GiftNbTvnyR/RhFUIwxWfevmkK9RxjpMOsphcvlGO7ZCXqPvBzUf5v9e8TZ/NmsfWeZs/Ub71iWYWEMZCOA8CGW+aJ5sqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hgLtXa3WJzuTkOEj3BfqfIOjZ/gcOiyZAtf80ZmSGE8=; b=LpdAfXN08Gf8YbEpXOxSsc+HhfXLGF/RfpAqkGt5or0zc4alwj31qWor/swTFj0WOqkiGb+rVpkAV/EyxPD32zfCr8ThwR3H72yWW6RyXAqz3vYGDKTpdqNQleyJSrxJYbmVtNfDJAgk7vt/ADqq8WmEuJBvXVsHr6K4YpcTT14= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 07/12] qcow2_format.py: separate generic functionality of structure classes Date: Thu, 4 Jun 2020 20:41:30 +0300 Message-Id: <20200604174135.11042-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fc675412-8001-453a-a763-08d808ae9259 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: usNoli1hiXiq05tV1a6nYEjyQvMw50q+iWLsXOyvAJcbqhpkpslej7hZNB+s8L/vz17/QmbuASyyBM6OLhYh9wsomIxn1w1jfV2bvV9ix9hkUrxCS1aub7nY7oG8/kkUE2i+8B0yPrrZa1C3K7QEZCKQEbStmRtzZioumUByfpq/gTaxilQZm8RK6LuOIMSrJt99NtJdhnp34FM1MDtuc2Sq/YGVyZF8zbolb1gtFvp1d5l9ujKnIs9l03RwnWawaym0y2SqGYNLk1hhII1T21ofpdM3llSV7WxY4rvzk78s+t4UX2BllCFcCQuKw/8v6r4kms9sG/8vMbrX2ttRUxPv3Jn9P8OINN1+bLeLYKcfgc1284iXYNuin0Q0k+Sr X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002)(41533002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: oWW7sz1dF4ncGRU9lvgGQDEgJs3M608YWU4dCaQyaM4WQLqPWlZpoHwaehcRPbMu/tHHUBdUNnoagfdclzLXu6BPXTKPVgylM4MbQgu2j2h88j2Iqlq7nT9qnZrT64QvuCdhlLTvI9fgv0ChqrS62go8AKvCIC750Hcn1crZrMjvHYrWcPyvH4OGAaMtQEkY7UWZYnXPaLENpLq5WiE1F1VR1Nw3YZ53vFA7jAqMDGgdqKaIoeKTunWSvioBdlaiPb12xqYgfyvxoi6+Mg9hd/DAqrtJP+9dtYF4onX0W4Aml9VIpeyrPEL9St+/901ght+M3+YMAbUQDo2XzIMX9Au1h/YKk/reIwcNyjJT4tgNTsDhTJN0Ycoc5j2uaOsqpRwyBE7l0cq0Fay0rzOx/ZQs/rgjCjoMFv3++3cc+jZBvTyOipjb0RUf652FkDsgEY7PMa4B7fdEKlUyzPFkA4Mlqp2+fHNh2+NBWm67Ijc= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc675412-8001-453a-a763-08d808ae9259 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:54.7308 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IEUvBG0jLLqZ/E+zVq47TgvNI9x/5hr9ISsk/l/jk/F3eJuVPcwNhi601Y4eqjm2U1EXii+Fw4yUaFydwdiqeZxS8mTZkxjXBcnDJmSSN4w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.8.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:57 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" We are going to introduce more Qcow2 structure types, defined like QcowHeader. Move generic functionality into base class to be reused for further structure classes. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 93 +++++++++++++++++++----------- 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 1fd9473b7f..d71f578377 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -2,6 +2,62 @@ import struct import string =20 =20 +class Qcow2StructMeta(type): + + # Mapping from c types to python struct format + ctypes =3D { + 'u8': 'B', + 'u16': 'H', + 'u32': 'I', + 'u64': 'Q' + } + + def __init__(self, name, bases, attrs): + if 'fields' in attrs: + self.fmt =3D '>' + ''.join(self.ctypes[f[0]] for f in self.fie= lds) + + +class Qcow2Struct(metaclass=3DQcow2StructMeta): + + """Qcow2Struct: base class for qcow2 data structures + + Successors should define fields class variable, which is: list of tupl= es, + each of three elements: + - c-type (one of 'u32', 'u64') + - format (format_spec to use with .format() when dump or 'mask' to= dump + bitmasks) + - field name + """ + + def __init__(self, fd=3DNone, offset=3DNone, data=3DNone): + if data is None: + assert fd is not None + buf_size =3D struct.calcsize(self.fmt) + if offset is not None: + fd.seek(offset) + data =3D fd.read(buf_size) + else: + assert fd is None and offset is None + + values =3D struct.unpack(self.fmt, data) + self.__dict__ =3D dict((field[2], values[i]) + for i, field in enumerate(self.fields)) + + def dump(self): + for f in self.fields: + value =3D self.__dict__[f[2]] + if f[1] =3D=3D 'mask': + bits =3D [] + for bit in range(64): + if value & (1 << bit): + bits.append(bit) + value_str =3D str(bits) + else: + value_str =3D f[1].format(value) + + print('{:<25} {}'.format(f[2], value_str)) + + class QcowHeaderExtension: =20 def __init__(self, magic, length, data): @@ -18,16 +74,7 @@ class QcowHeaderExtension: return QcowHeaderExtension(magic, len(data), data) =20 =20 -# Mapping from c types to python struct format -ctypes =3D { - 'u8': 'B', - 'u16': 'H', - 'u32': 'I', - 'u64': 'Q' -} - - -class QcowHeader: +class QcowHeader(Qcow2Struct): =20 fields =3D ( # Version 2 header fields @@ -53,18 +100,8 @@ class QcowHeader: ('u32', '{}', 'header_length'), ) =20 - fmt =3D '>' + ''.join(ctypes[f[0]] for f in fields) - def __init__(self, fd): - - buf_size =3D struct.calcsize(QcowHeader.fmt) - - fd.seek(0) - buf =3D fd.read(buf_size) - - header =3D struct.unpack(QcowHeader.fmt, buf) - self.__dict__ =3D dict((field[2], header[i]) - for i, field in enumerate(QcowHeader.fields)) + super().__init__(fd=3Dfd, offset=3D0) =20 self.set_defaults() self.cluster_size =3D 1 << self.cluster_bits @@ -132,20 +169,6 @@ class QcowHeader: buf =3D buf[0:header_bytes-1] fd.write(buf) =20 - def dump(self): - for f in QcowHeader.fields: - value =3D self.__dict__[f[2]] - if f[1] =3D=3D 'mask': - bits =3D [] - for bit in range(64): - if value & (1 << bit): - bits.append(bit) - value_str =3D str(bits) - else: - value_str =3D f[1].format(value) - - print(f'{f[2]:<25} {value_str}') - def dump_extensions(self): for ex in self.extensions: =20 --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591293015; cv=pass; d=zohomail.com; s=zohoarc; b=guNSKoBZ2GvKHwLt4hSe/U82cTE2+lDy6UERwzwEKed66fnKkZGQ8AiAxxVWj2VGI0i0INXeiR4z5YFNOKlqnc+MZqiWo7k5vBuOe0YO0Z6Ps9fiXtOhV8Og45vxtqE1TqCT0/37G7M2TOZpv36xMXKzT3HEShp34RvpHKzuYHw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591293015; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TRS7o17tJo8LBp/dEHVYO2RBXZ3zXw3xXhpqQGWqVKk=; b=GBWfYd9mSX0C37UlcB+PxYPeMdav3225xMD2knv8LAX3h5Liwi/p8nlmA36BT9vZWp+k8O4hF5MJtvbqSKX2QN0D0sp6cxew0qINV1yWZtyc6aCM8Df6bJxhB5zlqtYox3jOiTPTMvU8OcedEyMTVkhJFGsAj4GdoOLO+O5ZXfw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159129301527370.5371138400152; Thu, 4 Jun 2020 10:50:15 -0700 (PDT) Received: from localhost ([::1]:40318 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgu0L-0007pF-R2 for importer@patchew.org; Thu, 04 Jun 2020 13:50:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32858) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsR-0003F3-Nc; Thu, 04 Jun 2020 13:42:08 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsR-0005oK-3Z; Thu, 04 Jun 2020 13:42:03 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:55 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:55 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NboCwYcDekc+wl0JZrvMFny9aTX5EgCc+WTA3bDFFsz0HbZvyZ8dSk9a3e0Gf5jJ2jV9pjVcHfu54TEUdvBExm/7n2VqYbJj42f4xMtXzcwwtyHFH20qYUOtaSdO1S5rC5gD1Qw7AtwJH4X/kfyFEOJbbqWfRbq56lYvbIxp/TK1DEBwDoXBSRgZ5n8b2j8mzm/m8hAzxta3JAtFaP0qYCYnY72ugNFtKOgksL+HtUu1MbtKRIIE8slzz20GG+7y545Nr7uR4noA0UyZfwX06ZcU7oLdMyUKAxc0nzhmVRga+6Nenx0SG1ZM7ajWHw9Dx2PIQtiPqClLoTb0JjDfDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TRS7o17tJo8LBp/dEHVYO2RBXZ3zXw3xXhpqQGWqVKk=; b=c1z/hCq3FhdQSElBoDe33Mfv+K5ZrH5oK7b06mTjbpozvLc34i9n1wm6GHRtWJll76FIm6zaKwyJFFBZBBrTz69EIQkovcNdojWQX9wF9jr8qMCmPrUpdJ2pP4T5abIhXSvr6dmj3Yj0x+YCMWMIP+j+IFcMt/LnW16YdwEZ17pIN2APbQ/JtkQ7imU3s7q38ujdY2ZWZWTG0X9YCx0Mwp8KEsqXBmSGmtl/PNG+6abRnLX0uF6Dtw2r/g88e+duaoGqLj3RP2U+Hheds9xzqjQ3gC5zkg7RWqV3Wb4miFx0WA5EeKhExT0I5y1qX+Nb6szn6sLG0PhpqOBNdc547Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TRS7o17tJo8LBp/dEHVYO2RBXZ3zXw3xXhpqQGWqVKk=; b=whZ9CRIxTWjlg5ODSbWx30odnHCR9gG2YWTto2+MmpUHn8ohwD4ypRircrMjQ1IqWvlGwgo5O2TUH6S0BVQ/m+8f+WDuPSMoV/uztEOjkmBdjStDJPSXT+xaVPJJGxsiTz6RW2ItdTqIcOmvhVfDY+mtlRbztzwxRktqW+va35Y= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 08/12] qcow2_format.py: add field-formatting class Date: Thu, 4 Jun 2020 20:41:31 +0300 Message-Id: <20200604174135.11042-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 05a4ac23-65d4-4bdb-711d-08d808ae92cb X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l+8u6NoieZQEzWDKtYE46FEP0jvtp0Ev5N8g31dFdenAAQwbcWcyMgQ0aJgj+LQzVRam1xMs94d95wXTkcH8teg++zXp+P6oA/CmHrn1ctkqTPKe8tMD5gLUgUWygMCzn0U6G1axjwfCq9F9zaJkfiCXFly7fobpKdB+TkTI5pHrFi2BaWeYviYnOVT/WpKbNoEHhGBB3KxGJxaNL61BKOPobHs5otGQx1IaeY4MufFB4IyBGQrLZGGDzItXmNC9TkbwGVF0BZbcPsbxNfRdMfSwiwS2SCg9yTlJUxiKylAylcJGARWJsdHn5/DC7ew3x/7RjJ5ZRhxzMxYYd1k6WA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: ZDHZPUfXECh2prDvZCWDR2G+6p5Wo9ZG6ruZ7mCsrXLJQtZqNttlQ80D7LWiDEELb/M1Ksr2qhIAvTpq8cFYL++mv1cyizKRRG3yVZc1gHfuU1JpWxIEs0VKzjL8srJtl52KOyeG74MDwwMk8GjTl8HwzeINzMCSp9/SzLsZsX7WW+QuTs/ZIhtj9crwDIVlx+c1EF9drOUrriYXKfoiyh8XcmXJQdKgkMdcSvR967d7noKqXU/FNFw1hCdOcIS6jzoObCHmpnJnvMaoiHUKXFbzXHR3Twrt1rJNQFVFPKPEBdQP9qbkh8cVDAFp6JMKwW8WoQ+0umxM+VGx0i8b1fOANXmcEcCY0s9nlPw5OKIeL0CD3Nk5P/lokSAjZb8eOXvYSdKyjfIunWgsnrdPuHLUxgURfcw7KWDuVQM0S6l8dSTcwvBTSYVHXus3qupSDyPozvwTLygHNGG0XzO0BHrqsyr8Mw+4x2WR6ORA/eE= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05a4ac23-65d4-4bdb-711d-08d808ae92cb X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:55.4715 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y2ChjAK1P5x21WZCyOCKUseSzyMaHY/xn9Rd3SHuDbhcM2A+pYIVjbkgFdJy21HyeqrvEsZJVuS8tMixbFw6ApRhDuITu6j3QEqRSYNt4p4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Allow formatter class in structure definition instead of hacking with 'mask'. This will simplify further introduction of new formatters. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 35 +++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index d71f578377..ceb09bde5a 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -2,6 +2,25 @@ import struct import string =20 =20 +class Qcow2Field: + + def __init__(self, value): + self.value =3D value + + def __str__(self): + return str(self.value) + + +class Flags64(Qcow2Field): + + def __str__(self): + bits =3D [] + for bit in range(64): + if self.value & (1 << bit): + bits.append(bit) + return str(bits) + + class Qcow2StructMeta(type): =20 # Mapping from c types to python struct format @@ -46,14 +65,10 @@ class Qcow2Struct(metaclass=3DQcow2StructMeta): def dump(self): for f in self.fields: value =3D self.__dict__[f[2]] - if f[1] =3D=3D 'mask': - bits =3D [] - for bit in range(64): - if value & (1 << bit): - bits.append(bit) - value_str =3D str(bits) - else: + if isinstance(f[1], str): value_str =3D f[1].format(value) + else: + value_str =3D str(f[1](value)) =20 print('{:<25} {}'.format(f[2], value_str)) =20 @@ -93,9 +108,9 @@ class QcowHeader(Qcow2Struct): ('u64', '{:#x}', 'snapshot_offset'), =20 # Version 3 header fields - ('u64', 'mask', 'incompatible_features'), - ('u64', 'mask', 'compatible_features'), - ('u64', 'mask', 'autoclear_features'), + ('u64', Flags64, 'incompatible_features'), + ('u64', Flags64, 'compatible_features'), + ('u64', Flags64, 'autoclear_features'), ('u32', '{}', 'refcount_order'), ('u32', '{}', 'header_length'), ) --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292776; cv=pass; d=zohomail.com; s=zohoarc; b=RM9uEhhjlUXkU0uq6IdAQAV+O2btna89TYqaqt7LNNJAZFZKR9spJQQz7qgmlgdRhG9PnWmUVlILrIZe3nMb5TUo4PIHYTiuqgt+nXSpg6s96Ms932CILTU8gSjRCAqGGdSndoiTwHpE3F39We9fURY4xcyDyz0kePZaNfwEszE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292776; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/PLpCaCWiQy3FRWKZ2AB3l8DxmrcNiS/V+hI1S3DZ0Q=; b=EoTuvRpAGobur07oKO4UrRbEnFfUJYQ42OAfx6j7T/92Jofy1+ome/1pdZejnzIN02IfP71FIvoW0ZSHEhNOdvC31CYjsx4pgnIsEsVSQkh7v1nJLOU6S/CDHFrvMQjn3fnU590MRm9aSIwHogokP/6vjMdDuI5z2Dy1vBEDfiU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292776477905.8248065903638; Thu, 4 Jun 2020 10:46:16 -0700 (PDT) Received: from localhost ([::1]:54100 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtwT-0001Yl-JH for importer@patchew.org; Thu, 04 Jun 2020 13:46:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsR-0003F4-Us; Thu, 04 Jun 2020 13:42:08 -0400 Received: from mail-eopbgr80102.outbound.protection.outlook.com ([40.107.8.102]:37664 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsR-0005oz-AX; Thu, 04 Jun 2020 13:42:03 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:56 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:56 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XKiDPRp5WhY48Sacd0FUE3NlQbwuY/roDHB/61RlvEixBpZGtmw1QaLLINnZgf/Kw1xYKt89iV3HmWicvYyYZixzwYixTfvaqUyBClWEMOOK64Pe2HsVgEaix4kn9PoEmad9AFIsCcLeeheFX4wh31hbfPMPZWqKp0KgMOYvVEENyiU56ILltaweMhraICppLD60sH+sxq5WsMLJfHI7Wp+Ec01eP9wTU3Ehtmg3ylJRsJ7PENMEHdIwqdN7rAXphBoGFovnkAhtvW+dzdlwbIGlYumkhcG1RxtoU87yPAPk5MEj0GuyyNZUEqurljlAsDUtg6ROMcFGvWq5bHW4lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/PLpCaCWiQy3FRWKZ2AB3l8DxmrcNiS/V+hI1S3DZ0Q=; b=MdAwFJoeB3A1WKg4NTDjvnNZuwXPvIP3ApJAmo6lfctgDpvgKrTfGe3XbMnAY6yiONqcy3cAOyJX0uWzezSxIhath/1oAUshmjFbt2V+S7Nynf56qzrK3Afyzsturr7BS6nogCQCcx1xJ+3sHgv4Z37NgDaQeJBo9qn40EncoV3cJrDX1bUrmGUt1Nbc9UTDn3FTIJZBbvSMx4mCDBfY5khsr2AwybGHtro+Qr5MntyBYXvzcuVd2V1euEwkjxLBs7f47CY/f6Q0YTB5kj+rPE9ir9MOR/kJma23PovuJn179wyKwcGirsVvWPF+CXapfyflji2BzBZ/mfyufgN8qA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/PLpCaCWiQy3FRWKZ2AB3l8DxmrcNiS/V+hI1S3DZ0Q=; b=HhMgfulqYj9zkAbVQeq+tJRDDLR2kFwcmTVs/jVPn1qu35j94OaNm5Y4kKbpjWYuVoCg0V11W4oNP6MtrxujocRXAsCZGdkUjsQWOOYieZsb0jTwH/6N8sKlOpb6coxoJJR0gZuI4XFGVoYmhOVdDdqE0GgsW2dRflbdcHeq64M= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 09/12] qcow2_format.py: QcowHeaderExtension: add dump method Date: Thu, 4 Jun 2020 20:41:32 +0300 Message-Id: <20200604174135.11042-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 247f7c87-2b70-4a49-98ee-08d808ae933e X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Wu/exqftDboib236V7ZOK/VviRxKnsKA0yVVF/ZLqw1nwgJycMo5KYO6KbOcdX/g8iEm0J3KeYq7Dymjn/wCRhWTxtG31O9/+ze8wgbTLg3ktva7XQ5NtWP7L9zXbUcC6PuLKeEnptOh2zB2vIHaKhBVBe25kOWAP6nMpLq7wFxYSZGJidAXVNH17m3Dymt+a6rgSoAfpjIN/fH7SoP3oQz2yeNjjX37p4w3qb93NQLBs8dw5VPscRVmFoJHNBuGMImAj6Z55hRTuNoXCEZSofWjkDMxVv8oO79Xv1FgRqDO/E1JICOtmCkW0H8s8WUiUvK26EO3GmG7VEVGyYK63w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: i4nX5Ja8g58slHXYca/NpVWoLC2dDkHsjzQzoiFm+RvzB6OkQSFqvFHGIFiwkxPwLYCloOAl9QClcjQvNxgxW7VjiuwWTGg9c+6Q1WMyubjHQmbBVjNYwsRKSlSiRm8d42ojRgbZAys/bCghwy5wp9Aoij7jxOc9KnrQIE69KGCprCCZYBLBFZ1HASxPAZRIwglwPCkPSYQRAzKArlwjRtWO7QlL8kYPVbgaFWOYm4MnBwoUHlzpF5ub5mXeI2h816HUorEOtUAtUmQIYArQOVBEIsGFO6F1snLEgJMrREL8vChUJxjyeFcDCpbQKATp3Miufm4qqD9GDTvrIxeoHUd7d2370mGQO8uPzIUrqxRaPldMw7M9JFelVqd8wfb7nvoieUv9a7kGqY0xSpQnIzlFXlcLqFQ+3tXblIdFqKTjLgUUGIXMJKt5iF9pkgFSveAJUjRt9z5qhAYZ1fbEcLzZ2Q8WnODQcx/7Ssd102M= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 247f7c87-2b70-4a49-98ee-08d808ae933e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:56.2362 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: udgD+ok09wmoEh42/c8UtWCd/Dvgk3+IbhNdgfZAgFSUl4Plt6xEos5wybj3Vk6J4Ib38qs7LKf0ACfIy9acBemGnEvIOD7pqzc7POVOhXQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.8.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:57 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Obviously, for-loop body in dump_extensions should be the dump method of extension. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index ceb09bde5a..ffc7c35b18 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -84,6 +84,17 @@ class QcowHeaderExtension: self.length =3D length self.data =3D data =20 + def dump(self): + data =3D self.data[:self.length] + if all(c in string.printable.encode('ascii') for c in data): + data =3D f"'{ data.decode('ascii') }'" + else: + data =3D '' + + print(f'{"magic":<25} {self.magic:#x}') + print(f'{"length":<25} {self.length}') + print(f'{"data":<25} {data}') + @classmethod def create(cls, magic, data): return QcowHeaderExtension(magic, len(data), data) @@ -186,15 +197,6 @@ class QcowHeader(Qcow2Struct): =20 def dump_extensions(self): for ex in self.extensions: - - data =3D ex.data[:ex.length] - if all(c in string.printable.encode('ascii') for c in data): - data =3D f"'{ data.decode('ascii') }'" - else: - data =3D '' - print('Header extension:') - print(f'{"magic":<25} {ex.magic:#x}') - print(f'{"length":<25} {ex.length}') - print(f'{"data":<25} {data}') + ex.dump() print() --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292906; cv=pass; d=zohomail.com; s=zohoarc; b=QncjZzLrmFC/FQXqbcU/6NAYd7jWUVebwEbU/n3ENhAY2ha7t8/Vl0cRcHbAmUkdX4zO1QL/I1JomW9ZyYB6OabJ3jSrIXvjsCL7eYVYssiTMViagEMLcR7+5aI89/v4hWzsP1jdq1dgtspg+2X8GhYLqQw9fOcxiPBrLi1IgX0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292906; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=g9fiYRt2Z4q9FnmfIBkUDwv+W4a6+anhcznMkH8OU3s=; b=S3pOBR6cgtZILCBjd9aI+OXLb2+x2zTkPyyXf6h3mOFK0QnSwrdHV6czQ0FuT3N3EBAK1nMPSMWuNWggNF7pNvmhdquuRx3I/sGfZB37jV1Va0gFfUOxm/YpWCm0eb5deI1zIA0xuBo5nZlE2ny9EQdyX1mvbuhW2jTgGyvTafc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159129290655238.87861620463809; Thu, 4 Jun 2020 10:48:26 -0700 (PDT) Received: from localhost ([::1]:34420 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtyb-00055c-At for importer@patchew.org; Thu, 04 Jun 2020 13:48:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsW-0003FA-2T; Thu, 04 Jun 2020 13:42:08 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsS-0005oK-8v; Thu, 04 Jun 2020 13:42:04 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:57 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:57 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FX9MXGdH7rasB/57MkkOy/D1Vk48hGLPYnh87uB0vISDd68PtCXYh4N9+Djkghs8jIlNuUYdJySdOnN4fuUWPUCa1r4CP+6r4bxv3QvDIW7BAqdKIBydQzvTjIVgJwChjMpr25LobCAamMIbqAxPBfO6ROUSHRwKDSwLHVc7+snxmyFhUvvhxIlbHM2+Hfip5kKPUMQuZI7rMrh8c5cArTq1Rhn0keeu7drN9stCwIQGypEjIP0OZDHV6Hbg24C7jDxVtDJ/HkC8YAgHNgKkMBewZ+r1zxXY+2XBzi4jmyoLnL0N7UlkiRhtqA2AOHA9j8EmImXxX8Wna83/ZB8SIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g9fiYRt2Z4q9FnmfIBkUDwv+W4a6+anhcznMkH8OU3s=; b=dXHZiDA+HJ3WpNsnKYbUCEP1fGc4Mo32ROeg3ty0/iDfDcrZ6WM/ziGLNxytk2A9d3K9AzgS5/LUGjReGTcY/su6P8GsOd2KRD4PpHYwGj4mRDDKviWj/1I3xVchRyxseOp8WKZGcNyF+ZUewE9+PHsjmtC78foOZGm1OIK3KyqWWuowtz7sQ4y5TzVYbBJDj704UEd1MgI4Wew0svyFEn4CSsjn7z8ruN9NdFNJwv0YcPGlA7Qm0x4BYrz/e5qQNp5rKvVvZBlZOrPPw6hnoYNfgv8L3LGNwQrLeqG7HEmTjJQHwJnJjTP4g0SJTtKi29+XXiYPV9l6/oiDNCHVNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g9fiYRt2Z4q9FnmfIBkUDwv+W4a6+anhcznMkH8OU3s=; b=D1QYozythT/aq8feiV8zo5OyaBobG70ti/6wA+K6LfnL7r0XFdm/aK7njanPHTOrlSqTEPxFCW2WkdYHiipUOI5IPqy+MDP2zkaeIhTDFHXMcTKaYpN8IjTzBom/zmJSt5G/yP9tg5npX49qPeKbSDAaP+qVp17JOlFEVJxUMjw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 10/12] qcow2_format: refactor QcowHeaderExtension as a subclass of Qcow2Struct Date: Thu, 4 Jun 2020 20:41:33 +0300 Message-Id: <20200604174135.11042-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 447d432d-4379-4bcf-ba46-08d808ae93b3 X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /9B66XLw4B5MpRWWe/RI/1cQ0YDexaNRF7xO+g4BaVFJsI+g6Spy4guv69a27JQIQ6XvMsOUWA9nWDOZcQccg2Ms4vEfdFuXL2hZbxuFytufv8SYPMoACGriAgGOz6glFZJDYU0PlXT1XZo3RcLafSMq6u/nTL+5FBsLdxWW1pZVHFbfZ51aKPNpfDkVk+q7wrw3r/4hWv9lwBq77z+s7TIq/AncnG2xKFhh6hZUbXMY0XL+VgO7Her3XJtFSZu1+rZZQ+cgPLs1NQQaQ2h1SY3V1BOvYYPabFI1Q5yHxbh/axDHwxxixsZNrKpoFPBk6PSb3LJeoJfghL4gkr/wbw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: OXS0tAy8K0sQTqL/DLhXyoAt4o/qLUQO8f3vR+xd35f3yBIwLYiKWL1LpOXA1fKdL+9790+6dgjlYDXuMdx4qbjvggbdY/sEEjj2xAPosK2l0H6kbDqV8z44O2qRKVfDudnlK7gpdauJOqA9YuZ54RAXkVwEu550ERO5gTdYlshj9/jd3e21EgmiFjQCPh51Gp9pJa2Y7UhhuCHILHmnscGXyHDn2RvfZOmUja5LpTSUS8/1zPlLtuqxoltgmUlXSFQKTXCDcJd/KkQXyNo8GIDrrGqm5sPfCDjzBzYLrTed/s2dIQwGfcb/KJ0+ilJsRPxg/jiEMvfPrhkn3znd2+6ie6QlKd+iDouwPdSdXljwVfXjgOpfuaoXgDSCW2DrT/d3VdXY/EDGqtYxCSq+j861Xm7ms56zJorDyg7dOMAzMdy4iHi/fdUtFcML/8qdhHAwNzH00n4XFbtzitIlaT2qx6jjcT7VB9eKZdctJk4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 447d432d-4379-4bcf-ba46-08d808ae93b3 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:57.0098 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OMrSn1gq/38HMaNAH7JERT5CUzKMKksStqmZO4FZioxlcghtcN1yc82W5lBrn8vUepblC+TY41HPcLQjfjF1J3KhYmrIsD3KayxsCt+uPlg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Only two fields we can parse by generic code, but that is better than nothing. Keep further refactoring of variable-length fields for another day. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/qcow2_format.py | 51 ++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index ffc7c35b18..4683b1e436 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -73,16 +73,39 @@ class Qcow2Struct(metaclass=3DQcow2StructMeta): print('{:<25} {}'.format(f[2], value_str)) =20 =20 -class QcowHeaderExtension: +class QcowHeaderExtension(Qcow2Struct): =20 - def __init__(self, magic, length, data): - if length % 8 !=3D 0: - padding =3D 8 - (length % 8) - data +=3D b'\0' * padding + fields =3D ( + ('u32', '{:#x}', 'magic'), + ('u32', '{}', 'length') + # length bytes of data follows + # then padding to next multiply of 8 + ) =20 - self.magic =3D magic - self.length =3D length - self.data =3D data + def __init__(self, magic=3DNone, length=3DNone, data=3DNone, fd=3DNone= ): + """ + Support both loading from fd and creation from user data. + + This should be somehow refactored and functionality should be move= d to + superclass (to allow creation of any qcow2 struct), but then, fiel= ds + of variable length (data here) should be supported in base class + somehow. So, it's a TODO. We'll see how to properly refactor this = when + we have more qcow2 structures. + """ + if fd is None: + assert all(v is not None for v in (magic, length, data)) + self.magic =3D magic + self.length =3D length + if length % 8 !=3D 0: + padding =3D 8 - (length % 8) + data +=3D b'\0' * padding + self.data =3D data + else: + assert all(v is None for v in (magic, length, data)) + super().__init__(fd=3Dfd) + padded =3D (self.length + 7) & ~7 + self.data =3D fd.read(padded) + assert self.data is not None =20 def dump(self): data =3D self.data[:self.length] @@ -91,8 +114,7 @@ class QcowHeaderExtension: else: data =3D '' =20 - print(f'{"magic":<25} {self.magic:#x}') - print(f'{"length":<25} {self.length}') + super().dump() print(f'{"data":<25} {data}') =20 @classmethod @@ -158,14 +180,11 @@ class QcowHeader(Qcow2Struct): end =3D self.cluster_size =20 while fd.tell() < end: - (magic, length) =3D struct.unpack('>II', fd.read(8)) - if magic =3D=3D 0: + ext =3D QcowHeaderExtension(fd=3Dfd) + if ext.magic =3D=3D 0: break else: - padded =3D (length + 7) & ~7 - data =3D fd.read(padded) - self.extensions.append(QcowHeaderExtension(magic, length, - data)) + self.extensions.append(ext) =20 def update_extensions(self, fd): =20 --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292655; cv=pass; d=zohomail.com; s=zohoarc; b=lowvWK91TD5U1415uBvutNPiEyI6XuxA6EtMTNNGv+6D0TKx2cVKqeCZ0mybNJazpNMCPLqfgo68FWmED+pfRcsPP8w6xA2Na5BRzk3IfEkCMutsp14d0IM2V3lu05Gf8p6GgiztH9kiVwKzoehwdxv0FSLV3FTGQnp0/uwzOGg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292655; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nlQ0+04pOg0uYzgX1xyCAPm/hccG4vcFx1Rjl26i0HM=; b=I6JSaoD/gHxIJAiX/S//YrfSgqhT5jbtROKuz9PFoht/D01+CGuj0SWHGHtJxGJW351Mzykum/iAmFq9ZtSIkbCrzA5FYDg95UEVeh/YOpiCBhD/gzynGgXwvgIuoua7qyMEKhaRmPGCCwt6ZOjRsVWMMyRBwdHgG4LwLe4gIPI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591292655280251.02075566769633; Thu, 4 Jun 2020 10:44:15 -0700 (PDT) Received: from localhost ([::1]:45418 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtuY-0006Bx-0N for importer@patchew.org; Thu, 04 Jun 2020 13:44:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsW-0003FD-H1; Thu, 04 Jun 2020 13:42:08 -0400 Received: from mail-eopbgr80102.outbound.protection.outlook.com ([40.107.8.102]:37664 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsS-0005oz-IP; Thu, 04 Jun 2020 13:42:08 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:57 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:57 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m0sDrElGmw0iciNv8nntVZk9uvJdqxzUiJ+Mv+FvN5MXkOR/n136yPZ0wauJ3plyefIAFHTIHJ1VdjZhKPi4CMKyGBqgluXgF6FPH1G171f+OkxnAkOkAVEJlMfsjr6jtd24dlKkAANv9gn9ZuvUH48SPRsKqmQS7NDgqISs195EfiMJqCTumYWVTUuTIXR47W4OyZlPDNv1XLhbm0fg+RRCUyQ4ygRK0Cms4ZmSimjTaPgdNP1GVlyo6vqHarwi0G6R73/pINB51fBHmUaDcBUeOOQWB0ld9RyKEf6ZRXUIbprnLE3TUGLCMycxAf4x/4wz9IZ2dJpygRXRTLpI3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nlQ0+04pOg0uYzgX1xyCAPm/hccG4vcFx1Rjl26i0HM=; b=foz/j/ud3JOqUGEUZWM7TF/9YqHuiZpYO+BjK2JV3HHFa0vSE09EM+Xa1VpS7S8ASW1zEkVmXXeJ7AsCbXf9/IOoMida9ZC2tgbQ0VGdGPCm2Y5q9+sAWmGktPfOCLSYtpc5IceM+xo5jXrAHg0gZJJwdZXBOq2aL11gReJ0HmY556kcpo+yhodDrPZdG5zz361vCN1VxSzWIyNWoSiixlwPulcNT5FX3hAqkW4gnww08Vu4UEqsUiyZnGCHk7cXFwHsHE4jMgpqrK/kLnW9zcS3HNRwZtxXO8cB6lEcFEIbeEpU7f5MITUQY7Wj++Zw/XZFs5JHhSTklS0P2lZ3GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nlQ0+04pOg0uYzgX1xyCAPm/hccG4vcFx1Rjl26i0HM=; b=j2EQjunF2ubWlLU6AB9Y9BDeqDeYWcKJqY1WWgV/zzR3CnVOMlVERg8b9i7+DrTZGb5XLzQu/0T67Ghw+dEeF2bbKrgY2OSu+fPn4fJWNrx3m0faLI35fvACnwYlkrdwlwVl0bHzQhPkdqhxsa0kmOkvlmKGclZH+sE+xzSU4nQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 11/12] qcow2: QcowHeaderExtension print names for extension magics Date: Thu, 4 Jun 2020 20:41:34 +0300 Message-Id: <20200604174135.11042-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 675f68b4-2cd0-480f-6092-08d808ae942a X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:88; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9Qt8ozsBPFxpe4Z2TXAZiMz7JNTdPR9YMUPYIY+g52w/6LSfSl9PVGXuWMt8s2QXDCOAgPgH1dyx6in0/U2T7y4Ad69K+bEp4boxFV1Cd8oAInpKYRzL2IICNvaCg0MVZuiKJst/2lHvFtJMumqi8CkOicDu8DDH9v914QQbMowqvWTtfZQ14O1jxJQ6BpFVHczfCqQ2JaoYEOJQMbQyexLM4nib0eUOEjK8sq/zWfwlXBh+NTky3MfzUPI7fXDdRYZRCNiLzl//5J0YJ5UplHRyEbCac22I0YWMtDgmabiadABsw76ux871sAkEswtfBN6kQ5GNgMAyVGpB+2E9tg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Mtr0q9Y39lIfZqzk3fcXd410r58NWQiQF0E5gotOm4a8RSpmDlfZwsy8KeQW3Bpc582ZCODS0g4eLwDk5ZrmtluLmlhvCYs25eyaWWDEEReznsF06JJLnPDS43NNNjEk0bXRjVGdz9rehGdPNBfJUKzESvEcrbS3SX+XmnkKcAbV7jz43CxB+9E2uGMysU7kQygGLiZUXK4LBMS6PBPzGFsIfVgqvoj6yWjlo3e4km5fhq4hannDxE004eTwuF6LoSxx5wZtsxbvmuSk7vWaXF9DcmNnTyVmBNPByaF5Jfnspv0n6HRGvmgbAjC3dBxu59k5XiPAlnrYn93fWyLlAhNeFzCPPi62m8uB388iNcN20y+pCNDU9uEApV9INHs9SQUYaPLFsoikaSmDzZDsVeixu1ZZyb0JCgHa2kBRL5CICypEWepvEihmcTzEHOrnTG8AmgJImur5jFoA8x9frtJ4ekNYecpLg1FwsCtaT/o= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 675f68b4-2cd0-480f-6092-08d808ae942a X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:57.7854 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t+jNZON1QE3JEaE17q3BbdRVFDT0isw1OvaHlyZAoeEre8Lif4YnsjsmyQ7dgJSpRm7NhefUETPc4ILg8P8HOuB+sv+gCKPz4WaSov44MsY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.8.102; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:57 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Suggested-by: Andrey Shinkevich Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/031.out | 22 +++++++++++----------- tests/qemu-iotests/036.out | 4 ++-- tests/qemu-iotests/061.out | 14 +++++++------- tests/qemu-iotests/qcow2_format.py | 17 ++++++++++++++++- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/tests/qemu-iotests/031.out b/tests/qemu-iotests/031.out index 5a4beda6a2..e0225f4247 100644 --- a/tests/qemu-iotests/031.out +++ b/tests/qemu-iotests/031.out @@ -25,7 +25,7 @@ refcount_order 4 header_length 72 =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 @@ -53,7 +53,7 @@ refcount_order 4 header_length 72 =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 @@ -81,12 +81,12 @@ refcount_order 4 header_length 72 =20 Header extension: -magic 0xe2792aca +magic 3799591626 (Backing format) length 11 data 'host_device' =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 @@ -116,12 +116,12 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 @@ -149,12 +149,12 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 @@ -182,17 +182,17 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0xe2792aca +magic 3799591626 (Backing format) length 11 data 'host_device' =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 305419896 () length 31 data 'This is a test header extension' =20 diff --git a/tests/qemu-iotests/036.out b/tests/qemu-iotests/036.out index e409acf60e..6cf892123a 100644 --- a/tests/qemu-iotests/036.out +++ b/tests/qemu-iotests/036.out @@ -25,7 +25,7 @@ incompatible_features [] compatible_features [] autoclear_features [63] Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -37,7 +37,7 @@ incompatible_features [] compatible_features [] autoclear_features [] Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out index a51ad1b5ba..7afd2be9d9 100644 --- a/tests/qemu-iotests/061.out +++ b/tests/qemu-iotests/061.out @@ -25,7 +25,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -83,7 +83,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -139,7 +139,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -194,7 +194,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -263,7 +263,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -325,7 +325,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 @@ -354,7 +354,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 1745090647 (Feature table) length 336 data =20 diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 4683b1e436..caa190f7b1 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -21,6 +21,12 @@ class Flags64(Qcow2Field): return str(bits) =20 =20 +class Enum(Qcow2Field): + + def __str__(self): + return f'{self.value} ({self.mapping.get(self.value, "")}= )' + + class Qcow2StructMeta(type): =20 # Mapping from c types to python struct format @@ -75,8 +81,17 @@ class Qcow2Struct(metaclass=3DQcow2StructMeta): =20 class QcowHeaderExtension(Qcow2Struct): =20 + class Magic(Enum): + mapping =3D { + 0xE2792ACA: 'Backing format', + 0x6803f857: 'Feature table', + 0x0537be77: 'Crypto header', + 0x23852875: 'Bitmaps', + 0x44415441: 'Data file' + } + fields =3D ( - ('u32', '{:#x}', 'magic'), + ('u32', Magic, 'magic'), ('u32', '{}', 'length') # length bytes of data follows # then padding to next multiply of 8 --=20 2.21.0 From nobody Sat May 18 14:10:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1591292858; cv=pass; d=zohomail.com; s=zohoarc; b=GoPYbyad8ku0CPIGauU684HPnGHUYwkL5+xbdNrjbjciMPSmWI34ef4uhTayjUjvgLV4+4f+M4wVCWsmtnleWt7NTsNeIGg36q4gMo21lhN7C4sG3B7SS/oFhB+6m6CrZyxSKObx8QNNHHKJp7H4XuROKXuCJAHc0+t38ggFwwY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591292858; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Zge2olxOGfA/kN9Ncmml25aNwlwhsuq+R2IsppnxlWw=; b=AmQN0tRP/FoCV5S1Dlpe6hC1NdgJNtTqG+mHmPDwEjzSVsiiwNSZdtESFFz9UhdK9652e8unK0XDgfo24p6EBRrAuQ3RJE/LAr3d4WEycpzf/lnJNjdjWJR3mhQVFsbzodcNYB2caT3j4JdqNyU4ZELYfyrs+eC1VyNijMqV+xs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159129285852070.68256877253032; Thu, 4 Jun 2020 10:47:38 -0700 (PDT) Received: from localhost ([::1]:58246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgtxp-0003EV-6n for importer@patchew.org; Thu, 04 Jun 2020 13:47:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsX-0003H6-F1; Thu, 04 Jun 2020 13:42:09 -0400 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103]:11696 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgtsW-0005oK-JQ; Thu, 04 Jun 2020 13:42:09 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5381.eurprd08.prod.outlook.com (2603:10a6:20b:105::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19; Thu, 4 Jun 2020 17:41:58 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 17:41:58 +0000 Received: from kvm.sw.ru (185.215.60.190) by AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.19 via Frontend Transport; Thu, 4 Jun 2020 17:41:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JIacqKDazUhO3OFrU+zw0QytXCDWULfxdfq9vyowGakMJBNhOhF1CcGnSUSfz0bcFYpZvcz4GU5KO213yqBdGO00iLntMuB7P8aqSein/gWvaojoF9DtoPtjBybUvLOr2ghk/e6Ey6GyN8d91oOEchH+6GAxac6S6aDkF4R4CVv0dOIms0Ol6xFn9Fev7hQDukILgl9HrBeF8aYyhF3Hx7dKeI+HtQnrMbFNOG2m4zs1i648wfV0a3yFmnkK6DRTT7wNLlBGq9JavzODo2R2vSh+M6Ua5crhU0+VBuanQfiNSwiAtdWMkYg6nvEB2cORxXe2XmoaseGCrbwZisypKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zge2olxOGfA/kN9Ncmml25aNwlwhsuq+R2IsppnxlWw=; b=b0nd1KiLDDDcD5YBvJDM+4zYZj+v0RK99H+FVt5PAgLrSsNZPoPNf8jnHUwr99JZE+Gdxcv585Myss5Juk0JagfhwIb/WH28aJMZ4pzSh2X9BQfuY6DTCF8d+oQrNy9rOqlLGbQpB4GvwYdGiktW5phPMtV2JlSo2UyNEdATpP/cS/OVU94pTqqlTj5OIn0bPgaXdBbrMVwicCQIoClM31cXynbM42i7hQrwCWTklPNGhlJhzwxGDWqlRP308Qf6b4V2VtwBC4gLDQO5pS3gyTViMvrWEZldaxJ+c2ljZ84F4nvzoN8zROoWKX9ZDEcTNPUiwn3F9kmFq+1qJrG5Pg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zge2olxOGfA/kN9Ncmml25aNwlwhsuq+R2IsppnxlWw=; b=OpXyqcHOSTzNFjY6t4F12v+/571pMDdl2g+95ZCY6THRsiqXSx6TBGJCM/UWDzYwc7WpaHDjyvER66ZDQewNB3wsz3KQ/aZlQ7ouRX1fwXSE0BxcTNDsxh2Jnve6U0/Q5PbVRBrn2FXRhEf/5kt+amx3w/xNlBLJdNbDFiiIB/Q= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH v4 12/12] qcow2_format.py: dump bitmaps header extension Date: Thu, 4 Jun 2020 20:41:35 +0300 Message-Id: <20200604174135.11042-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200604174135.11042-1-vsementsov@virtuozzo.com> References: <20200604174135.11042-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0101CA0049.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::17) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.190] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 010e4021-42e1-4b71-e663-08d808ae949e X-MS-TrafficTypeDiagnostic: AM7PR08MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-Forefront-PRVS: 04244E0DC5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LZJWoB1pCw1foSLU1zkBoITQNEp10i+9iSinS+fVx1iNO4cKMIG7mQCOSUzl0lGB0841huhCyj1UmUSEjWxxYEvh2IWY57hIHgtTFDSVpih6Kuq80jjFLTjDRSSFoE+0H0rsxW32+pKAvJ1KNBYurc9uwbLfhX7ZhJZpD3YEU937dG9FH4xa2aetG1LvT4G6aJssCi/PnVBkom9x9F4EDvaNSjOEyxBxvVNDS/Js4ZuLUGNXxPqAlmAzv4KS2azbXDUb2NdcuH5qI+ZwGga/LGBRUo1X2sI2JPm2yLQ+4zpbAhiVml15aXgoo514gHaC5kSP08JbWxOP7tKw01OOKKkRSUKhxi5bF2egZNJYKJIw4A2nt7nL6g8T/P+X2IHg X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39840400004)(376002)(346002)(366004)(396003)(136003)(5660300002)(66556008)(26005)(66476007)(478600001)(2906002)(6916009)(107886003)(16526019)(4326008)(66946007)(1076003)(186003)(6666004)(36756003)(86362001)(2616005)(6506007)(83380400001)(316002)(956004)(8936002)(8676002)(52116002)(6512007)(6486002)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: sXdeBmOnTJUAw/KNeFZAbNmDDIS27MP2X0NS/+5ETzto2pXEdTo0WepkX9Uinj1F9RJRt1yeBBySVe7n0u2VF9jMC6CB226uu4jFIad+NNI1EF8KxZ0I264p5cT1jcUMzlVC7cO5mcendsFyMOsypbzIpBCg+jQybETkVxRMPxexza8r5zwv1ZH1tdGutcVwvLFd2M25Y8Nk/KcA+fFyVXJIzwXzGmivxHmN+Soa1HGU0NclVgMh9gRL+6KmSA2lru6JSv9AOSFQ7aL1fOvpAUUVJBS7EeOFYyyg32AaV81hbbUh5mMrzI2NfokMALZaJ/o4Q3Q8pPsHfQYrhJdvuAQiTsRICKiGnCOR6C6ysW4F0FHI/ATa/yjzigHzjgh7BZP9wsHYJOOlVo2kkfUeI4WfMvQplpWflbq7CX0mttrKrd28ngBlYq8c2o2A5rcBboDqdrLL5fHP+N2crw3xRimeRU5fsXlFpRb3wqshR2s= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 010e4021-42e1-4b71-e663-08d808ae949e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2020 17:41:58.5361 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /qegXeVHqFgprNPR3Z/pyGCtctZiJRRYzlqS4b9ctyuTxggaTx8hE8sHSQKLDnSmqB2FQ0I565ylx8gijQR63BdPYwrXlMVcpcuFiw/+nDM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5381 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.0.103; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/04 13:41:50 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Add class for bitmap extension and dump its fields. Further work is to dump bitmap directory. Test new functionality inside 291 iotest. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Andrey Shinkevich --- tests/qemu-iotests/291 | 4 +++ tests/qemu-iotests/291.out | 33 +++++++++++++++++++++++ tests/qemu-iotests/qcow2_format.py | 42 +++++++++++++++++++++++------- 3 files changed, 70 insertions(+), 9 deletions(-) diff --git a/tests/qemu-iotests/291 b/tests/qemu-iotests/291 index 3ca83b9cd1..e0cffc7cb1 100755 --- a/tests/qemu-iotests/291 +++ b/tests/qemu-iotests/291 @@ -62,6 +62,8 @@ $QEMU_IO -c 'w 1M 1M' -f $IMGFMT "$TEST_IMG" | _filter_qe= mu_io $QEMU_IMG bitmap --disable -f $IMGFMT "$TEST_IMG" b1 $QEMU_IMG bitmap --enable -f $IMGFMT "$TEST_IMG" b2 $QEMU_IO -c 'w 2M 1M' -f $IMGFMT "$TEST_IMG" | _filter_qemu_io +echo "Check resulting qcow2 header extensions:" +$PYTHON qcow2.py "$TEST_IMG" dump-header-exts =20 echo echo "=3D=3D=3D Bitmap preservation not possible to non-qcow2 =3D=3D=3D" @@ -88,6 +90,8 @@ $QEMU_IMG bitmap --merge tmp -f $IMGFMT "$TEST_IMG" b0 $QEMU_IMG bitmap --remove --image-opts \ driver=3D$IMGFMT,file.driver=3Dfile,file.filename=3D"$TEST_IMG" tmp $QEMU_IMG info "$TEST_IMG" | _filter_img_info --format-specific +echo "Check resulting qcow2 header extensions:" +$PYTHON qcow2.py "$TEST_IMG" dump-header-exts =20 echo echo "=3D=3D=3D Check bitmap contents =3D=3D=3D" diff --git a/tests/qemu-iotests/291.out b/tests/qemu-iotests/291.out index 8c62017567..1d4f9cd96d 100644 --- a/tests/qemu-iotests/291.out +++ b/tests/qemu-iotests/291.out @@ -14,6 +14,25 @@ wrote 1048576/1048576 bytes at offset 1048576 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) wrote 1048576/1048576 bytes at offset 2097152 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Check resulting qcow2 header extensions: +Header extension: +magic 3799591626 (Backing format) +length 5 +data 'qcow2' + +Header extension: +magic 1745090647 (Feature table) +length 336 +data + +Header extension: +magic 595929205 (Bitmaps) +length 24 +nb_bitmaps 2 +reserved32 0 +bitmap_directory_size 0x40 +bitmap_directory_offset 0x510000 + =20 =3D=3D=3D Bitmap preservation not possible to non-qcow2 =3D=3D=3D =20 @@ -65,6 +84,20 @@ Format specific information: granularity: 65536 refcount bits: 16 corrupt: false +Check resulting qcow2 header extensions: +Header extension: +magic 1745090647 (Feature table) +length 336 +data + +Header extension: +magic 595929205 (Bitmaps) +length 24 +nb_bitmaps 3 +reserved32 0 +bitmap_directory_size 0x60 +bitmap_directory_offset 0x520000 + =20 =3D=3D=3D Check bitmap contents =3D=3D=3D =20 diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index caa190f7b1..c2c636b442 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -79,6 +79,19 @@ class Qcow2Struct(metaclass=3DQcow2StructMeta): print('{:<25} {}'.format(f[2], value_str)) =20 =20 +class Qcow2BitmapExt(Qcow2Struct): + + fields =3D ( + ('u32', '{}', 'nb_bitmaps'), + ('u32', '{}', 'reserved32'), + ('u64', '{:#x}', 'bitmap_directory_size'), + ('u64', '{:#x}', 'bitmap_directory_offset') + ) + + +QCOW2_EXT_MAGIC_BITMAPS =3D 0x23852875 + + class QcowHeaderExtension(Qcow2Struct): =20 class Magic(Enum): @@ -86,7 +99,7 @@ class QcowHeaderExtension(Qcow2Struct): 0xE2792ACA: 'Backing format', 0x6803f857: 'Feature table', 0x0537be77: 'Crypto header', - 0x23852875: 'Bitmaps', + QCOW2_EXT_MAGIC_BITMAPS: 'Bitmaps', 0x44415441: 'Data file' } =20 @@ -104,8 +117,11 @@ class QcowHeaderExtension(Qcow2Struct): This should be somehow refactored and functionality should be move= d to superclass (to allow creation of any qcow2 struct), but then, fiel= ds of variable length (data here) should be supported in base class - somehow. So, it's a TODO. We'll see how to properly refactor this = when - we have more qcow2 structures. + somehow. Note also, that we probably want to parse different + extensions. Should they be subclasses of this class, or how to do = it + better? Should it be something like QAPI union with discriminator = field + (magic here). So, it's a TODO. We'll see how to properly refactor = this + when we have more qcow2 structures. """ if fd is None: assert all(v is not None for v in (magic, length, data)) @@ -122,15 +138,23 @@ class QcowHeaderExtension(Qcow2Struct): self.data =3D fd.read(padded) assert self.data is not None =20 - def dump(self): - data =3D self.data[:self.length] - if all(c in string.printable.encode('ascii') for c in data): - data =3D f"'{ data.decode('ascii') }'" + if self.magic =3D=3D QCOW2_EXT_MAGIC_BITMAPS: + self.obj =3D Qcow2BitmapExt(data=3Dself.data) else: - data =3D '' + self.obj =3D None =20 + def dump(self): super().dump() - print(f'{"data":<25} {data}') + + if self.obj is None: + data =3D self.data[:self.length] + if all(c in string.printable.encode('ascii') for c in data): + data =3D f"'{ data.decode('ascii') }'" + else: + data =3D '' + print(f'{"data":<25} {data}') + else: + self.obj.dump() =20 @classmethod def create(cls, magic, data): --=20 2.21.0