From nobody Sun May 19 11:31:02 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=1591431578; cv=pass; d=zohomail.com; s=zohoarc; b=RFpFwCGOVd8c3GPd3aG9dFYnwiyftddqnRU8KGIXMW6gDL+S6bVTHYHNZHqOa9eeF+CRwt1Th53FTuDUsReTfPx1gAhDFNY6DO1NkPRf8lWgGZec907xyujZqsZika2Bh5WelPLMmemSE9+9WP2A9L/1B7pYdEAaJMMW9VlYP1o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431578; 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=AupLY509YqQfM/QEMcfpuL2WlSw/ekGBrtjK2tWvI10=; b=N9dkNnRhJJP8tzwpqMGKZFHoXetp3yWDlztEWbA0cAVQNGMyjcQbUYmW4HZDWFS5dcJOiYylQnvGWXg80lpfoAi6oxlbGHiYITAjZFlvKw5cObsrMnRvp4KiyJXyqe3PjiJfBW4ErrYM4NyeGTxBQ2Kgay5qTzuvX/ODaNm3c4M= 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 1591431578433926.5418616331835; Sat, 6 Jun 2020 01:19:38 -0700 (PDT) Received: from localhost ([::1]:42234 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU3E-0004ws-IM for importer@patchew.org; Sat, 06 Jun 2020 04:19:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2D-00039R-SY; Sat, 06 Jun 2020 04:18:34 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2A-0000Zf-VX; Sat, 06 Jun 2020 04:18:32 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:23 +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.023; Sat, 6 Jun 2020 08:18:23 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ipPH3Gpd66OncwEzU+xoEfcCfUGtQ+SVrMrj8k9+1LAj7JtxRimyi1MKfCMpV0m3OunkIhZv0o/gfKvfSpSYaGNxTHIyQLTmRPj4MKoiy0i+Hur4JVR1VM8O9wOsZAIH9fSZV0TFSsEOrOK1oDl4RAyhYU6ha6xoMI4ka4SpHriS1jnynDG7caYo3tQOJ+vwZTYx2VRPZ5r/QsCclfkU1UKSU150B/tX0Zb4D0o3pKGuwjbUhJ80g69dZK4UixgaFdxV2Lt0GFjfhCe2kBgXqkNP8e5FUN3Nx3Vr0MlEVdK1VPYxcqPe4fuZmDRFwSypRl1rmLSipOaOphVU3464wg== 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=AupLY509YqQfM/QEMcfpuL2WlSw/ekGBrtjK2tWvI10=; b=UP40BCTuRqsHpA3mCcvRPa1f7ch8MQD6vRJ40iXjbaHi2B35clw1YicWCDlFAx2SvGb5ZYFkCbsHKfXoD+TJLanRxzB4RLASb3YIKchBgCN4DlS/jDHYkMJv9WwapUtNjTDUqIsS4MC1+AzmZIo6/3zogNcakEIcKm+6LQOFrXRd6btWpkI2QfUjawMB8zBy+GHo6ZeSnO4wnrCuI4HBsIR7ZoCq7ys24cJNaQoV1EpxJqYTaIseink2ohdFkW9Rs/5LQ4lbrVlyZkB94QgUsJi1YgXTHPLv0d+STV6C1vbll180pz0GRA/KAQRJ/OQJ58yAbFUGx9exYese5uDv0Q== 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=AupLY509YqQfM/QEMcfpuL2WlSw/ekGBrtjK2tWvI10=; b=jVkgyyqkeD6SaCY1FJSIxreZgUeBKpxHgvUnbRc1oAlmObThjBII8Rxtip0jG2yp/04wTLRIfmdDk+3/sM7XAO+Vpj8MVd2CTiNdENODcQvocwrtpGMkk3JEsCmBnvYWXZ9UwTzM+urfPRR0KF5uL9YzMaKqihkWvuX6pqT7vkQ= 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 v5 01/13] qcow2.py: python style fixes Date: Sat, 6 Jun 2020 11:17:54 +0300 Message-Id: <20200606081806.23897-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04c7f60b-e586-4ca7-bb92-08d809f22e28 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:741; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AFjhchGD8kRn9k4+bPekA2ZO2Vf9gq9Lv1c5IjLjEq7CW2GhSj4xYCcEFTpaai6YxzZcvnDNmHda66Pua/wVNGqbd2m7uCZZ9gFKe4A+D1X3YBVUHi/OSq3FzemrSioHXVKaBdJgawrqORoKngYM8rzJMRRJNjKSgC3eTlw5co5tGXgNUcnJU8s6JaKtKP6tqOitll9Xy3KjVV7waDloC9UnEos2jBsRMEKa8RIPiBNsKT83J4rJGsGvhl6qhtDsNz0egcV/6inyc0oSFC7tKnGosPtDJlKHbDwCkQfXFagTdZDNaQl7L8vp379gwdZ+7bTJG4sph9PnLRHOaqzCOw== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: KRPZKF4D1z1DOATxyB3PjpcdkrY7Zw17Nz5CuDYflimLH9dGpDC0jTJc6CG/hRV0rcHiOySB0VArfq2ycIpQ/rm/9EEcQqhOdZvjrOp3T37jgwzzaYmZPNJAmvslH2OuJAXdb5VZ+1EX/m3Tv1k0Duc+JZbHs2qh+wTGBdyqyWcAG1xCun485XA3b1q43A6gCzy9lLHOpSf1J2E6IBKdLvzb36gYRXHrBbXbEp6Z1Oh2em154HCLPB6I0Thh9ZLMNphyjpRuHVaK2fyoLbWreI61C79z0cX6f0CskYRRIqItBkgIHtnbNQo+P1qA9qe4OmAdAr8ENyHZijgQXUhC+k3983Ia7YSxSyS1s4XH1tEnQJ3F8KczJNyBvn2otDzuCNpb2oe2QMDJN8wf58y89LiG9MFJS7+gzkbefjSXCJpRJ3j0QFE0LlSsjQhwIq+LOm4IjBn+jbGOPCg5TD3ubQtJJVSFaz7O7t5HoyIzzlOpsTCKzdQwOHZvhbEkaz02 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04c7f60b-e586-4ca7-bb92-08d809f22e28 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:23.5575 (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: YjJevXdWlBYUJgQ/MI8OH7ezS7T2kRRRbcQJEEULFdOy90eYZjXTHxqQdzrpHujxfGmTRu7pg5BHeXCbPiGI63fTWDMuxc5TjFoqBzAUHV0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 complaints. 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: Eric Blake Tested-by: Eric Blake --- tests/qemu-iotests/qcow2.py | 95 ++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 39 deletions(-) diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index 94a07b2f6f..d99f4ee3e8 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,27 @@ 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 header and header extensions'], + ['dump-header-exts', cmd_dump_header_exts, 0, + 'Dump image header extensions'], + ['set-header', cmd_set_header, 2, 'Set a field in the header'], + ['add-header-ext', cmd_add_header_ext, 2, 'Add a header extension'], + ['add-header-ext-stdio', cmd_add_header_ext_stdio, 1, + 'Add a header extension, 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 bit'], ] =20 + def main(filename, cmd, args): fd =3D open(filename, "r+b") try: @@ -267,6 +282,7 @@ def main(filename, cmd, args): finally: fd.close() =20 + def usage(): print("Usage: %s [, ...]" % sys.argv[0]) print("") @@ -274,6 +290,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 Sun May 19 11:31:02 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=1591431640; cv=pass; d=zohomail.com; s=zohoarc; b=DHry7MbuyQf8nOJguKE7LS4g+CcuOGvwPaNVjYNPXj/SYuitxwXtJU2lg05XDNdMxJl6kgOZrEIYUZuVSC1yAD2PNhWoCxRn2aSJIrHhTX/WH7U1J5pfqJfwfMv0yuD9vpCyZ+3j0f1iPOjblx59SyacXu6nTuRN7PdfZ3Rmh8M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431640; 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=wCG3WQZu7zT9i6+FJSAMGxnsq0FTcViWj0aLP4/kVw4=; b=n0LQ8lNKNHIc4zv+EbhCJ3YmMgE9Iyk+eig33pVFjWwi4m453q5NEO9b0/Yr7R9neVEbvXhqgkJO56C5aKkCOIIV7fJ5ZIBFitJ3A224ru6yJB3In3FwOblQNhbUsMTNQMzYaZNe+N/LHHvLocjvzLFRbm0n3HPWlMgDbSUrZc4= 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 159143164014586.09155162655202; Sat, 6 Jun 2020 01:20:40 -0700 (PDT) Received: from localhost ([::1]:47770 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU4E-0007DX-Tu for importer@patchew.org; Sat, 06 Jun 2020 04:20:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2F-0003AQ-Hu; Sat, 06 Jun 2020 04:18:35 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2D-0000Zf-AK; Sat, 06 Jun 2020 04:18:35 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:24 +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.023; Sat, 6 Jun 2020 08:18:24 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cje5nvUu0LvVu4O/eo1KKU8EuaX2NkhO6L8DRsKNzbVD4G33AogqsPw+GCfNH58WaF2CrNPFw8Gd2edwnmTxX3f/X+mLocfDkE28TScZZfROUr/+fI5NxLRJwSwCVyKwY00CM4YUyxoxBSVIP6anq3UnXILg1BGXGcbsH+8yAaS1IBcTxJV6+JPgvWe2nDL9V0QRV4ppqsqztB5Jy/ges5X8Ksz6ryxLMYCOLbcJYWNBmmDJFb7KM8Y57Mz83zwPK6yFnzK0BOAgCiXKn+QNvEn1RTcz7xV/eZS2xvYzAhDvpT7eaLdJKP9ADPEgYmtgwyj5nT32fOV2AMqtIj2MMA== 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=wCG3WQZu7zT9i6+FJSAMGxnsq0FTcViWj0aLP4/kVw4=; b=ZbTbQgNv6HTD3OqwfrxaB5h956D5bw+G5vUAFzWBrc4ocjS74NWWrgfQoSjMsQRo65gfsvjjHL2mStoUSv3oDPXStrJjJyfK72E88zu64UI/Fp3pNQEtomBzLg6rZ9dGkmx6BCSLNaNnoZlsuTuL2hcYVLJG/JMIutpcfD43z70oqUtUlxg7BadiCp2E/rgJwy6fiOvDP2RfszlYD7axA4172oJZtBVRZgHQ28qT1Kk3PjcS6PgkMNiJ7f3d+kwjrjPYHX7v7J3mv0m3rREINmc3OBT0SxxI5HNtZsB7a1yhQd4vkbb3cqtHjr31T3cG0lPw83ays/n9UBFIo2fC0A== 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=wCG3WQZu7zT9i6+FJSAMGxnsq0FTcViWj0aLP4/kVw4=; b=Pq+WOeiQEhxr2+SYx6KyjTvdOt8FtT4A70z+zaU18LNrLZGGq7fXGEfYuNDjVBMg8Y3ONS/NILgIEESSlVNPX3t/akq73FEzXAZOiExVoAqIazPnoObUNEi3tHQ3S/NDW8DVH528xHszeuKBVsiHKw5C/nqpDr7yR7F17vRe7PM= 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 v5 02/13] qcow2.py: add licensing blurb Date: Sat, 6 Jun 2020 11:17:55 +0300 Message-Id: <20200606081806.23897-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 10691825-cf03-42a5-06f0-08d809f22e97 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I61lye4C8LW1bL992LW43lkjeDVwLDKCxxFWT4/gBiSVvDXsDmykcj0V/MZdFTOlPID64/98di3FqQ6OKkq0FD13gFMllkalTYCIYuyFxOU6RMOwJfiH/4YG7hGpQs+InMnZ9cwCLcVzwW0xZiBuvBzTCVCvdjMQLl19AfGaDwcagWFRcpqp5CGF6OkYuRS6ETdyioJb4Mafk+LGyp8hUM5sR/kvI6arbqV6aCyfn/APDCySPlBQIXa+1InUtvnNFUCXiUuFGTodvqYJBlIZ3dFKTKSmYr8+i3lseRA3LhT5qSflcLR6Iyglsi191+2V0k3aRlwa3oZlJjQ/1/ye9GlSJMqytQvmuYjKIwl9d8uNMceGbKpmLFC2xyY4rWC63z48UhPwn9s09QeYi1RNUt24FQgVK2OT8jEtIW9ZGBlQPQ8PX+XtwuG6dyJ5kTTqKDmEp5X+H1QoknHgVt3ZvQ== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: xsBh4hq+Slwx5KDwkYGIRfSGbOf5at1gMYFRChp45ZTP9DWU7dg2P0Ppyzlt/2uIA9R4v2x6AHC4/4bvHMvVr67MfQlpziXJ+mnWOFB+V4raAY97p0TcDVyxungAx73dRY1dndLmz+ifAxTr7oG9bPpbKzCPkq/MbUe/hAyh8HUwYuNk/YxisB9HcUk8lzQ7ltPLzXRnnHipvvfFchptI0rqp/Tg3zIMoWFrzQ3Y+cSFrGgSgQKXTpNAKu6mk8jz49QZX24Mxn4fFrD4O4ZdRm+nxO+X/SYRLsx/Tl+MBBeXrUi6G7E1iJulhtv0q9i5VXHZq92XrHDuejxPnvF6n7EOygg27jqJANvQKFBLPa4eCxo2gWR3ckU7XoKtx/BR/hgPm0w4wpye07bDgMUxHvcT4EtyBHImhc++AlVkss5rGb9OF10eLjeBXmWLCZg7SGd5jGIwsGcH5D+cCvlrb+6yyXqUMRYtDVgXlfizvBGOtaBU0Ms4nGnbxy7WtvKf X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10691825-cf03-42a5-06f0-08d809f22e97 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:24.2545 (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: c4ecoY5zvudm7/7JOCggI+cLcVa3xKFYlLoH4AllxPzF1d1JeJ4GpfAX5bInlgFD82CqHpEvcOKVEGosXmshASci55/GwVWSHCoYv/EMvIA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 classic heading, which is missing here. Keep copyright place empty, for anyone who have added (or will add) some intellectual property here. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- tests/qemu-iotests/qcow2.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index d99f4ee3e8..2da434a013 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -1,4 +1,20 @@ #!/usr/bin/env python3 +# +# Manipulations with qcow2 image +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# =20 import sys import struct --=20 2.21.0 From nobody Sun May 19 11:31:02 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=1591431732; cv=pass; d=zohomail.com; s=zohoarc; b=nFFMts7jbE/exMU+/VRSKREZF5K7OL59wbeohLmV4loEM6wW0baQdfyOqzMzZJLbaPpayCmd5YcVgcVvaybHE4CkE/TJag3sc/nvU+KPeLX2Cm5YnoWirF9kFIgh0xVWKepox+tQJShXokbUzJdUF+zqrQZsk4VN8XRBr1ocYRs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431732; 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=IV4F9tAzUXiVlUUcHYbuqDvhLaZpidtclIHPB9Hhq78=; b=GwSjZvDnZyZ78JSJB8lC7AR+Nd8+6lqrcbyd38Efp335PqBB03Q2ZDME+sQ3z9dbDL6fI9CsIXeOgQPmY5MAz63urWMrTks/O2HwXAmOSL7gH/oohk1OKq4cuZvQCdUsQPIvKs6i8z5F9QTAi1cMwOB8B/TuVTMChnhFkLU2fvI= 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 1591431732222436.6024090077832; Sat, 6 Jun 2020 01:22:12 -0700 (PDT) Received: from localhost ([::1]:54770 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU5i-0001iX-U8 for importer@patchew.org; Sat, 06 Jun 2020 04:22:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2I-0003Bt-BG; Sat, 06 Jun 2020 04:18:38 -0400 Received: from mail-eopbgr80098.outbound.protection.outlook.com ([40.107.8.98]:10318 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 1jhU2G-0000aF-BT; Sat, 06 Jun 2020 04:18:38 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:25 +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.023; Sat, 6 Jun 2020 08:18:25 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cUabfLkwJ5UnNo1fHMFqYjbSzRHQHqYUizX8/fy3RFKhPFLcCbR8n332eUc4p/j4XP0b1G0TA+LmczwAq/9cSJ1jBc2Lbvcr+IOVZsufFVahKClXYCcjOLEYVKTKJ84sW1UFCVq3qmygOaC5yVuYj4au9IQQgLXBJuA9uoXzinL/dQDb4hjCz/KKeReLAO2vTkWZdI27wUxU5Bf+3HtOyKlC2RB2FryQf+h4VL+qZqDrRZnAv+VrZ8btnjQFe9r6Z9hAd4UezqXIN5W0TuIIFKvy9BsJWw56JixplCfuWkhGsFdcNLf87Abjj1A1JUJn+oi1NGhzpgq6AmFVN8PIwA== 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=IV4F9tAzUXiVlUUcHYbuqDvhLaZpidtclIHPB9Hhq78=; b=SmUFBqbeL1zwxenE2Ytrz+7Hazr9KfDPWVbz9i77BYx6C9bF5LfddWFQdTznh4kqk//eKZ+3Ykx1VLVbwznaDcQao0or6MilemnjMgTeOU2wvbPicYPcw0XCYZm/MIRrMS4SC8IV0ub46F2kaNnwNk0Fhrt5UbUF1oQQyIV8BXxzfX1ACCGY/3cy3T57xyHodg6kqbP5Y/pD7HdvnxmxsQYCfNJ9eQwJBH4OZmJVuNNcYd21rilcdyjjSyi9P7SlLoRJEmV9TGrk5YfmAdevocVPGL10InsTZ8PSlZmZwDOVqfbw2qJh1fD79HlYAKdWKaqOwG6p7b8U3TPwA2aHDg== 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=IV4F9tAzUXiVlUUcHYbuqDvhLaZpidtclIHPB9Hhq78=; b=duKsxyVs2+6Cjh2PdRpPR9+zYbmyLGDjx87cVThfcdOj9UrRGMZFjqWn2t3mIHi42G+bX8dOfsH+LdakEovQtQEEf67nVqG/uYW26HtFAEcw2+01AnQMZ01jHUJ8t9ZEmTKsiBcgQMXIURzipu/jrgeqqdZc3RPxZyEkLQyRJe0= 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 v5 03/13] qcow2.py: move qcow2 format classes to separate module Date: Sat, 6 Jun 2020 11:17:56 +0300 Message-Id: <20200606081806.23897-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7430039f-c416-483d-99ac-08d809f22f07 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3276; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AI/qc1JdRTH99tHQk5j60U/DLfiygqoPf636rJEy7mxhYjyGdA5Y5LKqqWYYAgMg8dFvab/c4OvC2nNsbFmkGxSETGpriCyjS9hmXkHA/4mpqJ3e+gvvL4LeZ9vNCFP0bnOQrbCLByfVRFYEn+WOUEfVv0rlWCo8jb1uWbYwtJtlTauUnWNpzQLgjx2wo2fGji3enTktyece+wYx93YGr54N0pB+PjDzwis8+qc5NxHVsXqtBiuIvM0nHFO1FoGi+SX9s/DVpt1w6PlT4JBVvVYByO1+8ptnvoZfWPWOhhqBIavFQxBY9s7qxrYdteBNJFSyMqKyM+8bfzmNheoD9/t0w7/0CQL6fc/v2rWoBPRYKSB2SVCzLIWAYKARTdm4Mz8+GEBwQkFDL2iT64wFvj70l9Uzi6Bw5P5SSRBVUhSmgalXYC/aHVq7c1PcCMSpwH2nF4BNErLZlNtgQAoDcg== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: o8T6JlnbAkjE3uPJ6e2yYauFtu19jyM68FYL6HdHWR0iB9C7GfSXY+Sl0O4pk4Jzld0C2pAPZVz6harZsnBJ9kWCFF0jG+g4Rq2dcLCHH0AajrwVNoAIcrHwfatEKm+wiCMs3XbqB6C6SGwfUzBAbl7fRQcy7ACj9RXYz2plWOvgT1kxUCOQCbiz+W3tmWaOsIlbrztAqNXJhszkUfTrthERxZEu3ba4d5Ax2pZgeAH4x8/7ETv1cwI10YvGpPNK4EnJrzOuWk6/gA7dzWhMJpCBjcXs2BNEXzcNNqIllRUYj2a7Mp2kfcQee0E/+t/OqnluVUnuSvl6Mc+hPKXRsv5ZTiiLaqUUlQsazpulga77N7clz3XWIfD5ON7ZktOxDsAcleE9r6JfdFpXDAj4938Z4CzvMowjIOvSaz5fgpJ+KBv8IJQIrDt1t6hJLy+ZnZV7jlVnKGnYdacIVePxGa1mKpLC8GlLuZq3Y+2XYmEcqiF2HZiI4cdlg0bzdFcX X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7430039f-c416-483d-99ac-08d809f22f07 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:25.0480 (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: 10nQry46uRZxoHXNh9OUYU6L4jCR+UhkLuR6MGnq/zwZESWWeGgcztaE6f/1xl1xzvkOZnQCsvQR9E99uyIZ7UrOkOoRvG2yEs1dvgsiVqg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.98; 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/06 04:18:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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: Eric Blake --- tests/qemu-iotests/qcow2.py | 160 +------------------------- tests/qemu-iotests/qcow2_format.py | 173 +++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+), 156 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 2da434a013..e968869ea6 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -17,163 +17,11 @@ # =20 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..0e517c1bbc --- /dev/null +++ b/tests/qemu-iotests/qcow2_format.py @@ -0,0 +1,173 @@ +# Library for manipulations with qcow2 image +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +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 Sun May 19 11:31:02 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=1591431677; cv=pass; d=zohomail.com; s=zohoarc; b=g0bzxvqbDZtlaw1pZrSANbTgjKC1dlzDgKjeQDCOTNbSLCeiA05W2q8+Pm+OpeLx0pWaKq9qEQEOL/8j9Vi+EeLRrDYabOOTN5YSL0YiRU84QZbsNzrYyEdhIARxytos+M3KEZa7S66VyY+16oX7/mNFAnOV2a909KEVcBI7Qtg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431677; 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=042mayG3ikBGqvj2zuaRxqRFbtz06/OoB2116rP3Quk=; b=VrwgYHANT5xEfBjIvqXUG/ZWwNWSnXxps82rWdR4FyyoeG0MiIiqeqrDDjWajk0hn+XfJsNN5sTsx5x8IBYNvSo2uBNmevVa1HpJS/Aih24YPH7XLzkgI3fwrLgmrMfHwXG6upNMA3H6HdoP0gurQke50Qo4g2U1mISwYJhDW9g= 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 1591431677413649.9196887409887; Sat, 6 Jun 2020 01:21:17 -0700 (PDT) Received: from localhost ([::1]:50596 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU4q-0008RI-8A for importer@patchew.org; Sat, 06 Jun 2020 04:21:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2H-0003Bo-CV; Sat, 06 Jun 2020 04:18:38 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2G-0000Zf-15; Sat, 06 Jun 2020 04:18:37 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:25 +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.023; Sat, 6 Jun 2020 08:18:25 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bUMwDQGfXNzSSZq7lm5rcp9cO0tfWcLJMNjgB/Xco5m9n6N5bVYdEBap3WcRmeYz5AExASjaojoKszqIh1sPnhCYlzaEhqceC/B3nGtRlV2rhS8QuKU1hvU5hNttyfKqoJakm+5jYlZw7lKVt6Ezcx2Euotf0BxtNfRINuQ2UWm99qlxX6tAbUjcVRodIY4VIhdmyYbeXuaXSKOhBoF//00jT/INbwMLTY35dSt4eHJMpb551DdFir9zXYdn4TgVNkknKTK2pwNCj8bUfTc7rsXr6DRfwk2a/sqMG3jmU2AgWO9NGrf+yYIYhtIn8WOOle8mARfBx2+77HMYuL9ZKQ== 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=042mayG3ikBGqvj2zuaRxqRFbtz06/OoB2116rP3Quk=; b=DuD7e5m6mdTYChQL9axrJQkPl3cKwz9oUbrA/6dyyJcMKoiMy0ZI36zUdDFMjvZFTgxXxZKrUA+Q4/7zr6bvilabVpECns0PE+ce5yBeeLCpmeHwkGJJYmO2nFxwGmFRQ/b9/DeYxlL3MHnFS6gZI9jC+iWSRBfxxm4Pjm6JHbVaCoZGfIWsfMYZ3KD020n3mN8kuqSh9KrVlIW/ql5IvMbOxrRul2TfPUSzLPcRr+EKaplNaNqvVQgrux4ECL7sHRdS+OBAQuUCDD79m2DiJUcMV5eABQOdvlk2XroT+9IaotGAO/xk2H0bFy8EQ+NCIbu27E6ccaowANlf9IqENQ== 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=042mayG3ikBGqvj2zuaRxqRFbtz06/OoB2116rP3Quk=; b=dUmvsL8qUBF+TWjipQXeFXF+iO7StZF0mSwMcuxJU6rpHJeF81+j+HVjQnaL04TJCcQjnkP9QHEUq+YRW5C9xP7yIyjo7MvzyYzQwRY0zVn+7ERVhMl8vPdJ44ujGojjhRKtfzqrZH6QSook97fTupQot4tkfNLE0D3ttC4xwcc= 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 v5 04/13] qcow2_format.py: drop new line printing at end of dump() Date: Sat, 6 Jun 2020 11:17:57 +0300 Message-Id: <20200606081806.23897-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b232a7a6-b619-4e96-aae9-08d809f22f7b X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2043; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c6RVDla50AXhnMX3mUaDF8Cj8rVr9KF2wqn+uZ2djIVeASvgtmDozoyAeRb3zN6bCxD7PizzNmT+W9dHLclChxqEWViKlmZSmlY8O2JNaN+JAWmySl0BuYJjTHYg04+eD0dAB7/5yVS4WRQwPsu0b2R4HQR6I9V7Lkyk+95EnR/FF44AWGbHO6Yz/3VbIqpRx9I+8R2p4KLyxRpoq9H7T/YDljbxt21dM/cxLUjAHq4ExrM2Gxrn6juDNvgOQ7y7gtq8iZbHIRYQKpUx1RwF3P6ZIXr2S0H0birZLgfGrVnnAkPQmoPEs+ehiRYTYAS3 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: LQHM5fYA0pWd18DFLPUSVn2lvPA78IABYNG7m0EFRzr+G4Ti9yKPY9sVfBF+ntHZGL7WWnSyiJIO0sSgibDhE4yrZUZDB8Db7LM6biprLXYW5xHbxDaJ8xgVzWMeBeTg3pTXMijLzAf96NrVHETZCOME/p/af/LxSk2z+AZBUihEiU3YVQcIw2cx/Cp2uY3lzyAQO8H3HnoVoCVxUVqCAdTfeAOChFGz30ipBUiYJ3+NQkKmGzNvOHJetZx2IqbMh8Xwm2shTyB9LPzKjxo3Za+9FCFUf/vUUI5nxMhbOQidsxb2rBVP8Nn9MNiq0AHi6M1xK1TcUQcP0lHZOGsjuMiFTYjDN6HaL7Sa241C5c0DvKL9i761LOHq0xm8cN66GbosNHhP0f028UpwIVL/AMdhv6n1zzvdHBWi4OIIXaoS26Am3q1kUGftnwbW8KihcNEA9jWKcmKbZYgjj9NCKXUR95Qd/TGRnHUvaLOQYUanxtH0olY7tZblHruyV9de X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b232a7a6-b619-4e96-aae9-08d809f22f7b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:25.7618 (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: YCzybhjuKgJpgcT6a4+DDCIjdxOmANhDgjF7UcyXdPMS2cguG4YPhRnrlxCOPxfDIwM11J/4eh/1scGWVfB4R8jEf8bDANKofryXYL447eY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 e968869ea6..8c187e9a72 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -27,6 +27,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 0e517c1bbc..2b6c9612ae 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -155,7 +155,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 Sun May 19 11:31:02 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=1591431594; cv=pass; d=zohomail.com; s=zohoarc; b=RVp3afchLQ0riD/71RwAz/z/+q6DAJcVqOcxpXdU0TwIT+OMnLLPE3IfC7cdIzYqoMl5oBvwMmdtrHm7kKAWlNFP5wJVqQPKSIZrsK2/lE5u8yMyX3NDpI7QSJy2JZ5EUcf4gCWg0iMiJBp0+CDI9ZFV1KeAdPcLsq4t+V7AMp8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431594; 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=ZrTuEZSP71gDjAkAdyTteEbsPsgCIEKlj684dtwCzFY=; b=M+oP2upp14GhdL5ofyikm0l5RNKsLPpe8pibpw6nWi2/nLMOo/AeSajg67vk/eSgD/3R+0D3kvxJsyTT8vKUanCmxCBpcJgcaOH3gENxHALy8JKiAJNWJCDqM0WrIYnH4b2uKGN7JEFlKZxS4pwLxLEdax07YI9ddvkZmUXNN28= 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 1591431594462647.7659756513069; Sat, 6 Jun 2020 01:19:54 -0700 (PDT) Received: from localhost ([::1]:44088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU3V-0005hs-0w for importer@patchew.org; Sat, 06 Jun 2020 04:19:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2J-0003CQ-7A; Sat, 06 Jun 2020 04:18:39 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2I-0000Zf-D4; Sat, 06 Jun 2020 04:18:38 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:26 +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.023; Sat, 6 Jun 2020 08:18:26 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N9vuaL2Q8W+lXRrIcwy0Qe2eezG3JZQfx2mZY2Z3guykxnAl9biNxYtso7oHJOBTSq0fjpKNlhPKa+SnB6ApRxSd1LOU/yX2CqPCzqUyv4yvfrGhxdFypnU5wyHRLovNGZZpRgDwhJC3ddU94aReSkCETzIFWg6Of7Aevas5bsMa73KicANlxUoaV40BUSXJYffpuF07fo0w+RWBWWWzsfrBtFFywjCqL0MHGY9Tfodyj5+V5nNIIHEUsptpNWWxkbqwgUPOSZo0vz+qYebWI/g8TUE1KKAG6K3jCQ2/tqoww6pSl+rBfjtphaNSVlkezxaBgYd6L5TyztmkIN5gzA== 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=ZrTuEZSP71gDjAkAdyTteEbsPsgCIEKlj684dtwCzFY=; b=oN58eraLi/IpQ0SbroGIVVAxDAF8DCZuflGfuBiDaQw0Jd6rvjZVJ2nxwvd6rKs3UiigU4w7zXirHbxUv0hHnttgiZ7UPx2mQlPV3vf2qxYHKP2dpkV7UHJD2JknSHFheUQ+1FUO92NY3Anqd84r7bg8Fe9PduEDF0nlv3tTRikxAARbVp9m49N/PgLtCtdPEZiiI9Xdw4sMnklHqmkInlkrA/KvrI4z8L9KTEu51u9wSEVHlUMLVrPTjmop8zlwIwQXH6KrlZjuabN7Zk+2LHqtmdz6FzYpB999C/I9tC4hk6/cA9b7l7s2Ke9CfwPfQ4qGPRZo4dZ6i6hB3s9pyQ== 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=ZrTuEZSP71gDjAkAdyTteEbsPsgCIEKlj684dtwCzFY=; b=Re3E9Ak2FRma2+w6JVyKE1ZvMAjfoNMzVku7G4aYLBdSDP8HUO/29jsfkrZGnPo8TqBSbfhzdgYtiAQM/1qpAZ4rZHGXB4KLmxr/qsSWnva0IWrfC6A02wXmWwLbswbq75zO68FnkdsivcfL8hP9nBmZfQi0G/2NO/m36RbHh1s= 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 v5 05/13] qcow2_format.py: use tuples instead of lists for fields Date: Sat, 6 Jun 2020 11:17:58 +0300 Message-Id: <20200606081806.23897-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 99602822-71da-4b23-fcae-08d809f22fe7 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1360; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rnBbefJwwaSdHTIRTj9rbpT0ozi+wlBsZzJwseTrZN8MEkAY4hQJpJZgN4Ggu4f9/JLPaXdM/N8Tcu704uh8+w46JSL5LeFv4saPp8NP7OGbYW7fd/JmELCGO3p1CI60FjNW5e8+EbAEMnXhZl4pFHvuxmAj9FFHOSlpslQAGWuBS9AbR74VYaLWqpdULXUG+XLZtA8vzJZ3fUyVNtgOt+trVfMRPpdD+q3vA9aAprqaFCxMP+4of+khzsUbF6rKG83rbK6r8P/X6N0YP7v77B1igVDXCXJcSjdTiIZs4jxHKtU9C+cFiESg1BlvBJ+OVnqPHdUGh0ygbVXFT25+lQ== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: v5w6Iz9ims88wcDnSlVWJogkGh2ppDTFftgafI3GGB5bBeqOugTyw4EYGcQfRJO4phSw7a+UmMasHqLrPUyIlsz31Ry4TPBAUbR50yMWGWmo4TWDtkAW98XhINYAmxYxg7COL3KaZPzINE2CAhe1j3kO6UO+rIChfoExbRsh2XF56ZthQc/kn10/wZe0bClsnnnL6KSAhvoKNjVygisNyFdeu4urXgkvoBVUl2gU2GXE8Pu1gYtfxOf5a+TaF8y0BYScH35TLaV/bMJxHewh/Fvsf20AbYd9/pFK3TpQwPO70mfD+FI96QiyBqP0pP/+C3XWADNoER0ZgdhYWWJyK2uuJdwUoilyMsePpN1jGli2u0KR+KdQdFssBQVqduI/KndxyAc7YLIq3qm9Djx8VP5V5CEAc2u3pl6unC+3Y0M/Q7aO1fUgRq13JaHKb4MFvryRU1oN5upzBIa0ZWU4HvRLjhPgtSG2mHss6lcb+ZOuJzD1vpU9tP+v11l++Ai8 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99602822-71da-4b23-fcae-08d809f22fe7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:26.4936 (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: RdUYO3pSAUqSi/Zhc1Z5T8qHnCyr5j4gP4oxVT7bnRHkWqM1q1cWBuzgUcIWpud2m557CnPAIo43InruxcGgO544jWITyvoXq4DYour5Gls= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 2b6c9612ae..e2f08ed691 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -39,29 +39,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 Sun May 19 11:31:02 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=1591431590; cv=pass; d=zohomail.com; s=zohoarc; b=P11vSdOAWJuJYQ0KGk1zg2WemSIXEx5o8r2xTGU6x658ZGG9ew0zQMAQz8/bb5pUM4LbhDpBmwrTIaCf3WFLxfJyqJwLPDg+W651SYsoY6pjZuT/NM9IQL9ykh9Uxl2nwbn1v7SWL9Bd8oCSzZ4cIqt0K0W3SXvmdmj34aBwoZc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431590; 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=h/aK8s/ODvWILil7GJ9nAN9v1088qWMn2hHDPcFKLZA=; b=FbmSA1waL8GbkRN0RLaHc2rxQpSegqz/bLf/uUjYR0qy9Byu2IYW+bKwvlKC5/vxW/K6ds8T9wRXR79hEQWhM0FlO8KY3JBfNj1TwXM1mGky0dPKoGNBg9eeH9TS8N+wr8y609IVRNUUPMJt2JueZABBR9KcqxJtylgMYoyqC5w= 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 1591431590077148.09239869879275; Sat, 6 Jun 2020 01:19:50 -0700 (PDT) Received: from localhost ([::1]:43552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU3Q-0005UY-Px for importer@patchew.org; Sat, 06 Jun 2020 04:19:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43632) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2K-0003F7-1L; Sat, 06 Jun 2020 04:18:40 -0400 Received: from mail-eopbgr80098.outbound.protection.outlook.com ([40.107.8.98]:10318 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 1jhU2I-0000aF-Tf; Sat, 06 Jun 2020 04:18:39 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:27 +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.023; Sat, 6 Jun 2020 08:18:27 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZbcVBkx85I3AV41nepplgjkch3ypKhfPwLnLqB3RbaNcwVzV0VXoDLsZjN6ZCgJnaertshmtIgWgZfss17dFOSx07Y476HmNbD2f0HJT5IlrQOr9mNA+EJebhMSahfApMDYE6e1fmg8GqO2jPHi8AFLl142PJM7eBCSZI58sW/rwKlyHHPzXDYqJ7czhucqNQEq/Crz+md2bBKsKwiEFMC1VPsibOcqDp5OaNCBPjxBZXS+xMJercgdkHquEi/nrDN5YJlbiyxgOoTwgivHjuVzQYtOmKgvPloySb7dFhtadpRCQwwWm8rFOvtZ9AE1yMKnWVtBK2tFf0D4PnQnkdw== 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=h/aK8s/ODvWILil7GJ9nAN9v1088qWMn2hHDPcFKLZA=; b=BoWle+YqDO8kW54q+qyk1K+iQw9vMu2jRF21RiksQ2LRvmaz2/m5LAj78Oi4/SC/15QtTX0pOHIekSJRL+Ck5JbyOABa5tHACxhJmZPSsNaXRvKgnQhK1QIwNraYOTYqzElcQJmZO1RPyKAe1wuzQXLrUDMsQ8U4NDVIhdpCHmrvPiK5Y9SBGINc5sBI4SGBiVn3RTitzzxofXXXXf+9L4MIwaHC2lCUciW8pd04eNYIfDvdE/5nNfidZRG1XMBrtzBxIYin2gaxUYCWzknK8rkgh+6HNz+CVX1Fsf/PeZAn9Wjt9adf+iSp7OeUyw+/zYm1+lRn9zFjr9Pb+yH1PQ== 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=h/aK8s/ODvWILil7GJ9nAN9v1088qWMn2hHDPcFKLZA=; b=FHLYaTFONlvOsNzZDDQ5pKFwmnvx06QxY/Dyt9wKiuxq2Wfe9drpx1xMctdXR/IH1pi6kLq5Co2K84H7nNk/XERVK5NpGSkQaH3hwkHnmkOvsT2BXGyDUngaFF4nTROcJLtpJPciImAgKSpTziejeRISzwYuWHtudZe17j3Uy0Y= 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 v5 06/13] qcow2_format.py: use modern string formatting Date: Sat, 6 Jun 2020 11:17:59 +0300 Message-Id: <20200606081806.23897-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4b1d8967-aa3e-49b5-248c-08d809f2305b X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:800; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BcmnqHj57CMEFJUayqjtlJhR48/o6NmD6b4CXwTAFdusrMrK1aF/pHWOnIbrf16YYKkm/9RH9P4zh1thnLwwX2YTjEEJWKOGl5oQFeURU2T3oP4PF8+CKxbxrLAdoGwN1+OivTug9fICxHldzLQMdSeHf0zbhjZtdHOWG9QZQkWLxWeink8jTDlA2E6MpYFWUyJ1nJRM7wqtu6C75OSzB9CHUc1A+LjKQoh5jW9jv97su4mPLcwaMGsnYrvkBNuhcRNfkeObv6VtXzXVFRLd5r6npeDNIlc7G+YbZBrDBU3Wuy+V3VBeNN6zQMqGnJ3PULm7HsaUGQ6G9JcFWdseFQ== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: JXqoL/wI+nwX8zPjIO4Qnu7ByKIAEM9UYqSrLoK5yJSAc6mb3uWE1GUVXSTo5MXp3Ma7wkRGFDlx6wruL97mgo5YM4trgoj3DvJ46vUCsZOie8rvPEI0dDybmj1rbhOoqLmUXZo5KvRtSaZaCBOnGj2J2pTCSie+6GZ+hb9tJT5Wm1Wz2S5isI+JdKQIMKIOwIXsaWXgaY+eIHILyWvY0fHWCIscULHaGHLUnbPVpXygzpY1FdFNDt2AU8w/8KgwIqlNBNqXe+eM/R6P+HcLHtleBrF1qSMkA/srkwKOkrYtOxfq5WwRkqu/z0xcDxP9cO/Y1tdnjvefO5DroMy3gVJMFPlfOI6KO+airvzwtrXiR4ZQ7xb88iZGwriDgv6LKRfutUgwUWur3kW0oIi51lcFTxV/AkCkOIWLahT4mrNF2SsiFqcVtWqX2q3ocWdpg5rtEKab8mqjTo3o5W7fAU3A0PtBVbByBwTzWx5mgMI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b1d8967-aa3e-49b5-248c-08d809f2305b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:27.2105 (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: JFf9XaBUqgPwHBUmmJZLknpuulR9g9XyUFvOwhCm/rlSmRMgHRVcrtHZYydLAOYEnoMkYB4YVJDM0udW6MyqO8Jnnv7bm5OLJ/lx8z5l6JI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.98; 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/06 04:18:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 e2f08ed691..da66df3408 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -23,7 +23,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 @@ -41,26 +41,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) @@ -118,7 +118,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) @@ -129,7 +129,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 @@ -152,21 +152,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 Sun May 19 11:31:02 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=1591431891; cv=pass; d=zohomail.com; s=zohoarc; b=hoa8poNkvGajY4mz7aiiTnWeQZtxKUDcE6+0apdC6TtLi+qOkQk8cpQDsQ1ZxldZBgSweql3ngkuuTXPmJL8yeNvL0nvKNrhKB6nq1wkybNVwgu/4vhf08JUs7rFDoirEtLaPOudakJe9TO1qke7rZcBlzjok9mAXI2ZoMN0yTw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431891; 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=07M5mSe0ynU1SWeUTUqfG3L6vjoa1fNC2Z6hlBZsuJQ=; b=boMZz3Igefh3gVHPdlyyOo8a2BAFHm4GuG3eUf1gmutHct/FuaLwAuIsSl9XYj9BoJRy3AO5pO72eAbjrzWeM7Ia2HuH8bnGA0SUWVSSX+3cB53SQpD6zKpIv1m8mqXuOmGdVziVOpfeGEnVZqmGSfBk2lmvFeG/E1e2nmdKCsc= 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 1591431891553358.72775234743676; Sat, 6 Jun 2020 01:24:51 -0700 (PDT) Received: from localhost ([::1]:36178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU8I-0005e9-89 for importer@patchew.org; Sat, 06 Jun 2020 04:24:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43636) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2L-0003GH-0G; Sat, 06 Jun 2020 04:18:41 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2J-0000Zf-NW; Sat, 06 Jun 2020 04:18:40 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:28 +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.023; Sat, 6 Jun 2020 08:18:28 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cu8YYEQpwKBAik5L1XX6qe3t+CBYttk0WX/oe5IU4HnknBQBA54qwkciOcE9xzKiK977A1WWi/uhu2icqVRVQhY293zb/5WXVwnBUktX55tiLkSp36rCoYEK4aBL7yqo1d0xH0XUGGwNff0rxJEd/CbN7GmUBnxVKMssHJhUJCWpLUiETTgH+/Y5C+nHQhHUsnHRKkj0ujKmVDluclNhDfUd0DYfpWYCA6M+X/9l6yOaF8hblqva0BP1GLpKIxMrgzpmDeN/zJnKrxkDUFq3FLzMY/iloE263I9PXimQn1bIGWIVm5+9G8adkUqQcc9ELf4gZZEJrEiM8hGoh8i/YA== 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=07M5mSe0ynU1SWeUTUqfG3L6vjoa1fNC2Z6hlBZsuJQ=; b=ClfLOaiMBEXT+SRdm3ONpR51+kCwLLGkqEaVlpRAbcgasS/ljhsfQYc7D7qu3uvZPqtZoCurhCUYZ0CkyfwpjInzFE+9moh0F5UYCNnlycg1rEwFn13J+bJlIX7KhDyMPUERBlInRiSuRZedHhphJafuD93f9graIaLV8BeBGSkqNljyPVDenJquOlTVY9DrXHwDo1IcB0lEcWH0B5V6TB4FEmyF7c61FlgF5Fy4OIiX796oZjdpvgBdkP7+r4wxbHK/V+ZlOJZvZjY5YJhn0y+cbXyxi5KlWKD/ZkNEp7f4gCM8Kg21nSXYohfQdKmHw9LCX4lqQTFWl2htY0y2tA== 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=07M5mSe0ynU1SWeUTUqfG3L6vjoa1fNC2Z6hlBZsuJQ=; b=bnOD2L/DzcG2Si0mYIPL5DABlKwcyVyb6J7z1IXeldmFmpWZw898ZQipJjAGfNrBt1e48lhmXr9BjhdV/avVOkqaGG8mqotIqN7sZR3Mxg/Ftf49wMK1kCySO/qaCkJM+3hlF6yQfTeC0DuXDKnR//hSM+K6D0LzlJDzwtWydtY= 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 v5 07/13] qcow2_format.py: use strings to specify c-type of struct fields Date: Sat, 6 Jun 2020 11:18:00 +0300 Message-Id: <20200606081806.23897-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4d1072a1-b7db-4bdb-bdb0-08d809f230c9 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +B9I6ndMHt2xJ9zkyeuC5c1wMi+J56liQSy4fDbrT51Y9IlbdFxSIQQoZaYa7aqJ4oCfVcLW+RE9pqDs/hCeInr4VdhbWcwNDynskEDzypEOguqt1wTKgRZMjRV3a9WTHJMakgOAZRRJjyu3S1XOJdVFYuVFrjNDN8wa1sPLELu5MqYbBCr96Ps9wLpv+NTthXoTw/SyHoM+cvKXNEdESTQUyNTgnm6hxBrtysYNOUS3hbZUYcxcoIyhSSjOF6tYNbRIKsoNpJ8z6m9vCilo6/pCd9pxtGwmZm4gFIjo0YdBmX6N9Lm+VhT2oR0C+ph0k/JnUPNwqMVNbYkGtR/jlg== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: HKZT4PHTyDmN6JqOiAfnzMuw0Vo2l9lFVa6fI0JrTctbirsf2HeFPOggHwNsABvvkWpHYQCFeL5EmQFRGI1gtIxxrR55Nr4J1yZxVF8U9nHnAR5cRRAWoJlF6dB+S5a3Zt1fRULipC/uJ1YPatgcx2UBawMrKTaSis6nN9R0+zcYdei27EymS2xMUj+uDGv66SWUJLO9IKzL0Cp2X9b8b/mXeUz12TxYa7T+LMKkPTOs0FZzJoyEBh4By1zCUd+y8jm3OdbOJ0KwfVTAIz3NEg9YmaFT9NP/NBdvmU7DbaBqjji4HmHYCCy2b1X+AiWHedyi7W7Y1WCA2H+Q9DbomkxdWrG+pZdiKiub0nAZgQbXbWdn4PjYRmcZVAT/h8TwomYHF4WT6+eps0iD8cVsAoimDw/qmGICATx4TibcYJG8lq1cMcuwIPCDCrVviYKsyQEvj54GStf3U4Bd5QDwAVoo7bx+uPdTaVtejGh5mwg= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d1072a1-b7db-4bdb-bdb0-08d809f230c9 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:27.9452 (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: 5D/drCMNMIUIpjARLI1WbYtBBit/1Ua5u5N2DC7Lrx/Z8TogMOWS25Yzq0sfpSict/7BXjU1ARcwZZROr24Duz8Ex85vqkXrv1zRt9EHLO0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 the definition of ctypes variable in the class alongside fields: it would not be available then for use by the '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 da66df3408..28f2bfa63b 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -34,36 +34,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 Sun May 19 11:31:02 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=1591431764; cv=pass; d=zohomail.com; s=zohoarc; b=TKP5umzhe2nyp/QCSYECz/PVaaxVMCo1FY/HCFVEGd5KPPmHGNDnQ1jMgUEdPgjI6e4HYL0nLpUIa+AE3CX+qjmrlIyjQDI3cm73b6nPLijwPRioRZCQY1VdcZGbuKgOU9IUlo6n3ncs5vBFGuEpvz45bctfUr9opbGE9wtxlAQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431764; 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=dfHFnBeT8k5Gv6jsSDuoFAuC6gR1S+++A/88xbRCNFY=; b=MXh6tgbHtKgS0rtURzYbIxJyfrzZrm421LY9F3KtjeaUyL+5l6nSVB6EtIwC548lIepxiixHEekCSJ61j5BT61NazxoRZULVSDwVY9wyqomTycAaGVRmwLAbaBsDG5Sg+bQ41mPG98Cph8ORu/IrtAPJm2uEG6kcFBGwMlNYUIs= 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 1591431764135926.2791888652513; Sat, 6 Jun 2020 01:22:44 -0700 (PDT) Received: from localhost ([::1]:56942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU6E-0002aC-S5 for importer@patchew.org; Sat, 06 Jun 2020 04:22:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43642) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2N-0003IJ-Sr; Sat, 06 Jun 2020 04:18:43 -0400 Received: from mail-eopbgr80098.outbound.protection.outlook.com ([40.107.8.98]:10318 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 1jhU2K-0000aF-I9; Sat, 06 Jun 2020 04:18:42 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:28 +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.023; Sat, 6 Jun 2020 08:18:28 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ScUJf9UHtQhJreQt1uYYozRED8DxGtCxyVerhMNVnStjJOZV8uReerASHMlzCPRgPIWnn/uwHWVQhAr74Sdmp8NzZ2hI86wim6Ppk5m8QMQfKJ7WxGJwYN66G20IsjUP4mssITfjHpbPz2lJFfQL01ozQf1WpOuAx7wsVFmeY8cT/sgmIDI839EspIDT1x8bVkNLSvqvhCk7GIxUbDvD8tmyB7+CUpzp+lQWCwftrJDqVu3JXuwho9NDqm3EuhmBoKOqRw6fP4JyUtEIwv2Pnq6FbMzT/kiWF2oVec2v9O8jyKICMcPS65tZg4dLg1mCSek61NvzvpxsOGW1Fzho7A== 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=dfHFnBeT8k5Gv6jsSDuoFAuC6gR1S+++A/88xbRCNFY=; b=Y2y/m9mUK9QtYvz5QemoFzheiuAq78Iv42e13HZ71WRkOsI3ptTH5oM9BK3rMIBKuxvmCb9X728sKVc/zuRJP5nDNubDoWTldq+hhivxHDyfbKxa7Fs7JqZgd5zk37nUbsHMa2o/6Hc+HqvIvlWumKaLNOs1zdvQHd9Qo05Kmrpe7nQVPtazmJvjIyDmV3unFpLcCYwPy6g4SgBVMhMar29kDc8tkGb2D6z4Q9xujn72MOt87HLACBHNAP9gr3W4IceYfCIowObTnPXtksWHRVDcKAa/JnqaG5IdWEiUUcizkO+maJFB76xx5jQ2HnPmUBiKtoKfRoDJ+i1oN+wMkQ== 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=dfHFnBeT8k5Gv6jsSDuoFAuC6gR1S+++A/88xbRCNFY=; b=TLSf4DLlPcKPOMJZF5kQQsSQUqh24F98q4vHbNSuq8ucVXX9RkQVXXNcnl02hz3JuDe5FDr7PJbIibOq82qAgM1zAo/0pJfZXYorH1bFvoJe13T/3E5fgEodkzKka+cTV55edjHIMxD5CUlh5j+xYbpWToycVjXwVWL4036KlbI= 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 v5 08/13] qcow2_format.py: separate generic functionality of structure classes Date: Sat, 6 Jun 2020 11:18:01 +0300 Message-Id: <20200606081806.23897-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 80d6c1fa-6951-4004-eefd-08d809f23133 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GH6WEmmeipuFsi2X2sHrs7Y6z1uQUlxC0YUqeeFAIOebxmJHds4geRJl3B7ghDhQKMOutCjSbgx6K5/SoymBmGKbZYFVg8h9yRbFfx4ZZf+hSth2Fd2k8D+HN9MIhPn1/vryEWfj5S9DIzm0LDFJtS4SYXlzHC7MTC4QP1s79LbI0jgS9zTYcF9ZChpg3FLaDfIIbqfjIm6jQnEdbDFRHBlPoPYCF9JC+WkkZ8pKgFNo2u51oqGu4c7UODjFM6yGcQRA1XiOMYSehyGdav8Ms4oS/9cLSENITe9A8e3oHw4PxYLSlRGo/Bs0KF/dDrv7uzofiMnhiT3Kyb3ye143M8ovF+1nVxMkeKkMJoZOGhZiO3mWCEo4oKe0Z1Qvc/yqCSJ4VYl0zzUFNDPJDCwaHA== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002)(41533002)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: L00WG6KQ0BoRPkPY5FdCM2PMSdbnLZi/lZstV3ughtAS1kffRWiTiOAKLaJhN746oBICQXLOI0vlSu0XRVAjw3Qnnl9Qs7FtzowRm8ikTogzPW6/mzW3OwyN+fWmWUsySoeJwTnzpacvFP/JinzgvQCOv/01UdBNL5FkjoPT33PvS7W/ZSMYsP8b5zdCSov9SK8ROl8SdRsxEg2Oh9yYXa2ZaFE7qISewodXKlADFiOQ5NZY0NfNTheYD58RDf3P9IcVnNQINkUL8QJpUUzg8CCHl7c3ZlWvx0m6VqzgagsqvrblTHxG+aGJcmRhKgNH7UzLJ9xGRINE0d3jLLJtPUP5hbTm1vb2oKOGYAHAU58dlHDa/RcPrlDFA6cyspg2BGkwkzMX6u4knlVfEoACnHdDclIpDeUKHUzGrK+E0T83n/PW7o3vyBN/QoEERsF7rq0UvRwGWP51bZLgLQB+m6LEFyb1DBle0HuCLb4Cyq4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80d6c1fa-6951-4004-eefd-08d809f23133 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:28.6472 (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: goobGIpl5ZoIZLgZMx9hQ61nB+6iDkz0trqk3I68A3yZ/9ugd2VXHVIHQNDtrs5bbygrvx/Sdnkl/2QhNRbxNnAL2XG4PRs4axCQn6B/k8Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.98; 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/06 04:18:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 | 101 +++++++++++++++++++---------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 28f2bfa63b..898d388b8a 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -1,5 +1,7 @@ # Library for manipulations with qcow2 image # +# Copyright (c) 2020 Virtuozzo International GmbH. +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -18,6 +20,68 @@ 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 'u8', 'u16', '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): + """ + Two variants: + 1. Specify data. fd and offset must be None. + 2. Specify fd and offset, data must be None. offset may be omi= tted + in this case, than current position of fd is used. + """ + 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): @@ -34,16 +98,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 @@ -69,18 +124,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 @@ -148,20 +193,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 Sun May 19 11:31:02 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=1591431689; cv=pass; d=zohomail.com; s=zohoarc; b=AbypBlElJJ3jcnJOHtlC2egfybmS7jyVBHoTvC9Jn4InTfQtwzKCwfejS79XIKi3EwT3MUP6JeDQV5M6HB9SWUdDLJADD4RXY4T7kAdfnw75kxlWOoEHhMKUSRAgc6JYDJfO5WHRb0gH1sUesA/n0L0K23HVhpAVr6CORQxuN6E= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431689; 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=dYdQPZ6ZDUQvSjgesCMJB1IHyF6PBVFhoX0n22pLP8I=; b=m0tUl779nGG5ZGuyIAdgBdKWf35JBgMYrZj/oE+Dl2JS0pKuesAziV/vSEzGi9mx0YgwvaZqOnVFOaLtwviBCcW5qRgC4mzp+1rIe0QhniHssrlAek9+E6MEusuf3IFi63W8+UQFTDmUd0pyxS5jvP2D3sfoU8MUm6zrNSB3cKg= 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 1591431689494756.2902585283184; Sat, 6 Jun 2020 01:21:29 -0700 (PDT) Received: from localhost ([::1]:51706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU52-0000SY-At for importer@patchew.org; Sat, 06 Jun 2020 04:21:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2O-0003Kv-Q2; Sat, 06 Jun 2020 04:18:44 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2N-0000Zf-TK; Sat, 06 Jun 2020 04:18:44 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:29 +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.023; Sat, 6 Jun 2020 08:18:29 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XUelm02PkAQpJXA0Nw7jacyxtzHCga8P2bCux602j5DfUy3v6gUhvPwBpb/f166wBx9fIbbPzuIKuvQ1fTBIVZqtW+B2IHQmrFURNElxd6F7k0HS4d1DDc+zAUOEoyKvry68PEc8Md7k0/jkhC5KYu8/KR/+sy9rUgxPsqxdkJjkU8SuJuNi0CiHyDoEHxN7uWrKNRBhdRCnvU3u9DcVGrXwfOtXFKS42kQ8GQioad/mMjEvER/runay/doIwq/sJsCYFdsperJqaxjnZ/R9zwCZpd5d/r/whTvxFmU7sa5vtBdfObyvF6PPKNQKO+klBFGMs6MnVrXXxC84GqJWeg== 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=dYdQPZ6ZDUQvSjgesCMJB1IHyF6PBVFhoX0n22pLP8I=; b=js+hOAR63CqhL8LAWPCR2bseU96lyxbhQ7x+NAazmzFghEOKCCnSHtvxNyh3dTKCqqW6hyiIWBBDqF5/SuLiWaA6JJA+pYUOu5jdV4vMpUSRNIV9ViRzmKhou7dFhXsgp3PZ3TuMTUDj7Ag82l7BnWY8r5LbA7Q1Akw2LIRgJ3Ld3/nmIZQNsPOl3vCXkA52UnacOYWbzTVzGY2UU2HbXoEgNkvCDb4mlkZE5iw+flLT+qpSD/9v4i8xO4CWAlSA9Y779YCDn+Fh5y1B8xNOI8TrCK0fmPERs04MVKZloBJoNMPDP6xxsgbPhzwC1WsNjl2vZKNQv9I77MNVLEzDRg== 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=dYdQPZ6ZDUQvSjgesCMJB1IHyF6PBVFhoX0n22pLP8I=; b=SY6sg6BcDIlBV9R2oj3Nl5zd8VWy8KjUexeRNbBEAZ9mZFJ7qlulT06ryXekKgR3fN3aNTZ8GRNAC3btAJFNS5BoRCbFcHsBCVhWcI9ZwlcZhdwr/Nt2uWuOq6dqg7UslMSDXo8S+1NS9mmxD2QJYu8T+Trn8feAajGp6/wtSA4= 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 v5 09/13] qcow2_format.py: add field-formatting class Date: Sat, 6 Jun 2020 11:18:02 +0300 Message-Id: <20200606081806.23897-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eca96768-f7df-4540-6b1e-08d809f231a5 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5Oy+mrVlxiAoj5NjT++8+fj0+wSn6MtAQvGjTNXnmHN+0Mb1m6WnaXZv2C9FrNy9/f5RTurBu1AIXHWGZBjBjbRRCvF81zQsuCGNFnNZZ36mikZRPQ2wervS7isx73GRgZceZrXfPwCZafkhYIZPT6FgQqTsQ3GPDI2Gwa4r1r5ANE23o/XzcmnV5YYY9zhHpHGWo2Xcw5mB3TRwV88nUQJXVOfTyG15TbxtNVptfQeqogfrTXmWYlc/bWOFsgv0+IZw6ahPC/ziZEjg4jq/zVEdU17Ew/yZn9vXZ9qpGWRCkmd77zHPrqvC+TIY+2FKJrYXxrc4nOC+40O7wne4IQ== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: oYpR/agEmUvwhNnBpnOEaGIOz5wuQyte4TOn43pHnpWylsudndY3srWNI1H3qyDBsdGq0HjAXz8DC1U0MuPItR4eO0kZWMDQmkuWpmd/vq/G7V8cnfg5fe+iytiyoZn53bI93B6pSG0KxX4FVpL3C/NmOXgFQIVr//2OcVfGxrCEZY5WfuSAs2p8U6tIdZS1VfZ6lDSJsQ7ydBEPaY/aI/1XI6nIsOpRGKQ6Aom8ksZPmY5/5PMqBFOhlBiS7wVtIall3+qnOd0Q8881aAoU1l81FvtvhDVy63rzo9tcJwZLXBong4jKpmaldhk+Ca3wzidsVAYdHkv9WNNwDhdYIJh89IMJ9nyzCEyI56wgj6nxyyzkklf4A33gBPYmIhyqrQl0kSR4V+bqowjjqLQfmW/siftMiegBtQPFXouqxMZxB/0NWIoFt7kv2Q6ZkbhEqYOeL36zU8UuArA0i1F8hwMZEW+nYPxuhIlaZJrOS0I= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: eca96768-f7df-4540-6b1e-08d809f231a5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:29.3869 (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: nUEomgbhrkxrZ0U9lnrQMOfysxZJ1eoY8zNZzChOU2SVVYEDs9xsiAt9h/MUzcALju4gx02omqDCGxsX34mF66eCQs9un25bonoBTNXd2dc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 898d388b8a..74a82f9263 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -20,6 +20,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 @@ -70,14 +89,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 @@ -117,9 +132,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 Sun May 19 11:31:02 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=1591431777; cv=pass; d=zohomail.com; s=zohoarc; b=VZk+UJNYyK1HAftGbsfC7ZSeoA36uPu2farWm3vuLS3/xy6kPnom+cexnXKn4Ek4yvsZ6tIk+u3ow7VIJjglMUaosYu0zGQDUPjCxHSVfk+SD9105wWWKLGVlHZ95VnuRZGVJmh8cAgTu2NqQtXfW/lsxQvRl9u4pPjey9ZfD0g= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431777; 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=0sZqqV1iSKd1Sg26YcCLKy73hbqWBzNLdaeOWWyX6mE=; b=fiEphFTp6dI+d4f+9KPv9Tew4PmsGt77blZ3xKVsKTDiROjfL/oWgcibGEuEerv5uO9O/yLF/4KqyWOUr4AfLkzuoJ8I90yKCNhpwi9/g0/EE3q+1JU/ahuJ5xeTOBc3/LJxcI9V6RBgpqhgb2Ya7WiOTy/fF8NtWkFgxLGeZ40= 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 1591431777492890.8386643349005; Sat, 6 Jun 2020 01:22:57 -0700 (PDT) Received: from localhost ([::1]:58048 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU6S-00032S-Ap for importer@patchew.org; Sat, 06 Jun 2020 04:22:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2P-0003Mn-DK; Sat, 06 Jun 2020 04:18:45 -0400 Received: from mail-eopbgr80098.outbound.protection.outlook.com ([40.107.8.98]:10318 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 1jhU2O-0000aF-HI; Sat, 06 Jun 2020 04:18:45 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:30 +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.023; Sat, 6 Jun 2020 08:18:30 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SDTvQ6KHTJctrUSE5KtdsoMRBExO3cQWYJ0jmm5TY7vvBtUfdL1S6+d92y5JYlryDkToyScwSrarz+Jel5IjpOf2e42VpXuMnu8KN9/VsGqeFWh9cMAkYSCvtRcgz0/uv+OoaJzhoZ+eF74mfvdsqabdAHECmYHWhff1QPxqXNV16J5FqiPGofe4brrWQtCDckVt55jYvJyrkcBk/Lr/RW2YB4GSmhFdcs/ZM4V0GyKSGvKd0zs1IPv6r/83ZY7TVxfBN6sLBfvqRDOZsziWCaDjgXec2NtpEM0Lm4NprXBP5wz1KZaPUzcE8vrw5bbiPH+ijeda2eSsehQc0lOELA== 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=0sZqqV1iSKd1Sg26YcCLKy73hbqWBzNLdaeOWWyX6mE=; b=Cth/njbb3UrVICVqz6ntNhCMaRzNXllV89tyt9XvllghAkABh1sks0e3tOqzuUDdISSciB7FMgO7swXvG1qFWmyhxC5j9eACcWrSydPed/5lUgLthhaFH/cesloE4FoKQzGNvmXQt5AEe+o2ScVLWoEvGKBmQRtTzzrh1I1Kj5C/MfS31fv4b88nXmwsm63Vg0gqfcPCL4c4BDf4mwMmo6mK1jAI7CYC4GUOUmgyVfpVh1KqxCDLhV+fsyyBQYc14kpQyFmp2sP94patcCCR0CD2C+vqvR7rw8QA6KfZbRRw0N7RanSMZKDqVLNU6r4c2k4InMs8TgiPr6yeg+V9zA== 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=0sZqqV1iSKd1Sg26YcCLKy73hbqWBzNLdaeOWWyX6mE=; b=HlnXXobtHKLptkqzeiBPcNsJx/r/D4Ay4W+XQOG7Q4mPFDkca5yVO7Uj/0831icCBoQTcIqUPDRI0CGKUwj7ol4zt/9rN1dzwoRvb/8S/2TIsV8ANPl8hFQ39FAJPc49Jfdx8zdjI9y5A5Mow07ClIvHXWoOykGRdL3bpk2PSL8= 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 v5 10/13] qcow2_format.py: QcowHeaderExtension: add dump method Date: Sat, 6 Jun 2020 11:18:03 +0300 Message-Id: <20200606081806.23897-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6d4c8b91-f1a8-4601-fa6e-08d809f23210 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OCPllso8ukDqFhe5xlyYjOQdZexMsGz4oKFd+juRVD47E9orEYhq3RnKQzThayDI0rFM07zg0xrQypOaDrXqVjTP7+I2h4dHuqsIsP4GBF2Yeg3jEjXJwnyQoZmmmBgERXKnppZB8mrP3MmoHZiM71vRf67sGViaogJKDLIGjvkm5eUklcpgpBPaxLLvd8AF4TKXwfLbf6WIOq5cGkyemESxHFd2sEYzapZUISy8Sy5OAvCz/98yS1tOnjYe0BZDT/ek25DBFJD2ABbrkgzZsOicPQubahe3Tgx5E/mM1zBLq6FUU4EOjYu+sp1CCtrKp/KN9G1cobpXH31Keqab1w== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: pPCgOV5l4fB3GD+YbWqtfvDxnA9eP9FrnJauQEPwAuPWClh9eYGPM0zqL+bWQMO10N22UkHYql3J9JM0MFygFEkOyK2qTQnetdyuVZgGVs7/pFhdr9zBXpf2hthWHxjlKMMxcsSDvk69Vr1zHYAT/Z26OOSI1HXKF+1lMajaxTY3vHp/x3sEceifeWwg1PPE3zyAZGpvNTV72YFQhO8oIRXk5i7b0jGfx4Tt4Q0BV1rvqhCtrgzqg6GbHAX8mjr3dijOAN78fD7617Ek4J6ndFrhR3TOMbs7t8fQodrYGlF7ei/jJXuRboOWJRfGc/N6iq4i437QPoVNln3Sle89BslAB03iiMdB/Ljsn8/WvSMaHqALwmQM/6dP4z0FWkegDxV6ijL3QwI1YsyzmLhNITGJWWU7CxzGxX4DwOCstkgZjyizaTlHZcRRoL+aOwZhIuY+Eui3U/xYlh+ZnqCrQwgrzSfIsE/rt2RGQOc+JQ0= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d4c8b91-f1a8-4601-fa6e-08d809f23210 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:30.0749 (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: saxgg0pFKA3OPy6jNM9lXMRzCg76EsxdE3aCb33XMTAVqzaIIIGArbMU5r48heaiDprMaZLlk1QIzI7EDuz3CGCbovQrB6uvvtSjVU+dNW0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.98; 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/06 04:18:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 74a82f9263..d4ad5431b2 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -108,6 +108,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) @@ -210,15 +221,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 Sun May 19 11:31:02 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=1591431885; cv=pass; d=zohomail.com; s=zohoarc; b=QrdtL1voBglKYqYsdCOR9Lvrrb01m7N3kHmgJzfLKFd0Lb8h4jv3cqGzUOd2QU4p8KIHqf8GbSoexbqo+e7ypupskLofs4G0tRM+DLK2GtKNkfgRcZQMdfRZAb6VtuhyKN561picLeAsuF7LwiJTdlIUJhtXTQJUPdx1JjLE2xo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431885; 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=MKY7QTi9FnFaSyknR9zk/lUliUn46aL1evV6rgPbhug=; b=QRyx3jekZBIziRTupcDBs0sm5eWYGmUQpuW29gclasok7tteSF2l628DdpGaDrIvoVvSlPzLe9uGFhQJQfkCXeYdB+ohCG/6K5KVXzOdRUPeibrgC/fwaSs6MDuTssRDEvZxLA8Uimg2X/cFL+I6X1LRDu87zxqrTLQTwjWHWgk= 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 1591431885315289.97530831842494; Sat, 6 Jun 2020 01:24:45 -0700 (PDT) Received: from localhost ([::1]:35542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU8B-0005Oh-SK for importer@patchew.org; Sat, 06 Jun 2020 04:24:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2Q-0003PH-97; Sat, 06 Jun 2020 04:18:46 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2P-0000Zf-9J; Sat, 06 Jun 2020 04:18:45 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:30 +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.023; Sat, 6 Jun 2020 08:18:30 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kAjtOSY2WwLYRtaizBDiKROdLorCfHLTaDMMahb2b9oDkrEJiNWjozN8kHBzXI3fenG3bLL477wbMfdnWPDl2RJPb8/fN3FCMCcH1mm9Nm82o+CObDTEUO5+hLpgRr97gu8ITu262vH1gPtNL1KJVXqKhK9GDXezTgCPqljdUlbyfxwzoxuFQo1DdcBhBzf2USKf6F+M0pIkEl6niBXUw+xKmh43+SaWx4s9ZWLkGI8Abb03QjWo25t7SGa63Wbs+DJUDqBBlBGjXf39/YEl6ttnm9zNar5AGOLHZmJ6m0Vu/eiRu9K4/yah+Dz+NCfgesGBpr3g+i9QEc5XqKF2Dw== 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=MKY7QTi9FnFaSyknR9zk/lUliUn46aL1evV6rgPbhug=; b=TpgY82D2FWHJFhJ+l554sOgTj2nuRRr84BreQIsKkXlC0QnzUxy4aQeUskshhud99nRHcKbvbTptnRMupI+BbkJBhm5Xc+q39P0aGyWd41BrAcsnt/OvfBFsEsyTV0fBM3dSlbtabnEgL83lhBObOBkmIqb9XTgDXvTkECJMemFUHhZEtqPoZBTFJAhzmUvGB4WgBel+Co9EDMoHM4qH1sGxlb/VDTQDhaN7oaUNUR/78yE29ytq89+AoOfOP7LhZCRuh15I8Y5qB2wBWZYcxXlGyrLm6EfkYb1Ihl114WK2gnBVgTB76nbyf42Y+f+drXLRzclgugVyVdEk5MF8mg== 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=MKY7QTi9FnFaSyknR9zk/lUliUn46aL1evV6rgPbhug=; b=SuqFaBcVrBxMG+LoX7IabDTeY7AsHCsXvGeoYsLpSE/Hl1xa63rNmuNsUPkZ48ztVEAiG4BSX0l+Y/jqWE/GSO99FskjD/NhxojKZUuAgPyRX//kJjRf21KxWHmZ+Ii3iKVGJeNy+9ulfL73K2jpwp+Ss+0m3y3AZjpp05yIcEQ= 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 v5 11/13] qcow2_format: refactor QcowHeaderExtension as a subclass of Qcow2Struct Date: Sat, 6 Jun 2020 11:18:04 +0300 Message-Id: <20200606081806.23897-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e700780-0845-4346-2bb6-08d809f2327b X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vnhyk05frpO91i0nhIxznXD1sZO8MkUkfv50hj5hW3xZV3XaKerBiO6X6eCXkTj55ZQgpRqhaxuYqvISq1cP6ueiU5SQ5DrAONyDPCPo7URC+XonfPOlPNuCTcE1gnQor1ARZ5sJ+vWZqzHWcGT9KL3qK/reWgZoO/eaF7Oljsb3K9jEG703BmwICColMMIkTazpkC6v7PGNZSDf0QcXqWFFi3Q4Xl5o1C0pWTcAatWZGUsxrZ67o5eAokjpX3UDfqMHL0/H0V6gXj8BtguM04VlPt/DI1+SwtkS3DOQ4vBeLYG3LT4g8gkKgqVWGnGFTlWjvFGm828c55TnkpWAcg== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: zfI+TLMfseivzw0wzGncHcvDAnhLLCHoU7U6dWdJ7TGxty25+6XdmXFhC/Aylx3fe63LaDDa05MQXJrBCOSbPTWVq6VdfJ2eO1ZaOJN2C90GHltLHB9jq1YFy6+51hLOgAx3aSiH/WBwW6kcusWDm+7CAOavAmFY7y0fYXPUx9ltD/F+R+J8dUUv3jFxMN9bO890RC5hj/0UEI2/eScFG2PBNEPSBJ0ptw75P1D1L2UThBfgwGHdHHCWC5h6YaOf52T4Ay4eyBjsHx9OSqic+uSF/9bBXh147MeJmyxmYQtsSiW+xa6TqqHoEwhvsoX3m9lL3HTi7IvkDtKbFgHetSC4kIQ6n6e2LFl9xI+SFRJcfXIdHWeJej7D7DlTBtg+rIvGkdJ2qf6xgBqd47TaCu9DQiD1XQaIpv5Pwiu5/SLso08HM7rfXJKSebJB7A1Wfr3feY8wsLdZIRZPCA6ZZFcns9036TZ1XToP0L978aI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e700780-0845-4346-2bb6-08d809f2327b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:30.7947 (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: nG9MCz4tkR9nifEtWIRUCM5BN3jRmz+CGPH+8vg6frBFxHuoOBzPDn22ZDgSHpZ/8X/xEZYgJmAxlPyKvcsCcAKJYEEgg348R0zl4BpN4FI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 | 53 +++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index d4ad5431b2..32371e42da 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -97,16 +97,41 @@ 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. + For fd-based creation current position in a file will be used to r= ead + the 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] @@ -115,8 +140,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 @@ -182,14 +206,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 Sun May 19 11:31:02 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=1591431898; cv=pass; d=zohomail.com; s=zohoarc; b=hN5B7XkOrD+VNxxwxHF6XI8ilApIkBfjPiTYfxOZ976C0MCFAnnlGqRR6lqwh8PKNU7tVwG/ML3un/OpfzWZj/o7sTr98F35ZItk43NqqHb2LFlmqjAnGWVsPooXPob0XvQt+MnDCY6eUVeS2pqiWiNRceI2/kW3lIE+HbGWzws= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431898; 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=nFqwTS+IEIF8fiGePnW8TJ+NGVw52lopBfxN1fYrXtY=; b=dKcZQaQKEHRPhHVJ8Yu1yCPStwk/SWfTbGTbCiRqfO0aMyaLduqX6owbxU4toS80oQXU/tp0nCpu3MlR1crAXiU3WUaeu9XFF5l3YrJPLXPTgIDe7y0h6Vl2zwqidQSCf0LOOFRVJOVeenkfwvJ6JiQHuBra9mMl30ePsbi7H2U= 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 1591431898195831.2443657747586; Sat, 6 Jun 2020 01:24:58 -0700 (PDT) Received: from localhost ([::1]:36662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU8O-0005rS-MV for importer@patchew.org; Sat, 06 Jun 2020 04:24:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2R-0003SK-8W; Sat, 06 Jun 2020 04:18:47 -0400 Received: from mail-eopbgr80098.outbound.protection.outlook.com ([40.107.8.98]:10318 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 1jhU2Q-0000aF-2K; Sat, 06 Jun 2020 04:18:46 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:31 +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.023; Sat, 6 Jun 2020 08:18:31 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PMI/g0iAc7BhgiLS2r5J5e+h0GIMua49hZyDF+pU4ADwP2C9w8fqcFqvTUa+CekRki3ZYa/R8lhtjiR87G+e12T6Ey4ZPf/GbjV6hy+6xGiePnds/aQTgCBajYGpduNYklxG1MQPgh7pfW7ky1BqRykCJBw3SL6wxrYnl1Tm+1zGrXze3pHd6pyhvxrM1NiOfF6yfz7DUvPmedrlCxnOnLxgV0t1CHyRfnl8sE/XtVylgX4CyiQNwYzSfxNeCgWa9PHqiYSmO/DemyTieAyhoxztwR15Zwmim0ax2xhMr6p468L7jBZOtMIPrVE/uqfPdnJ39IlQ+nXEIG+nY/oNuA== 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=nFqwTS+IEIF8fiGePnW8TJ+NGVw52lopBfxN1fYrXtY=; b=WAo0+cscZZN7vIThmlqUmHi/BUZXWoefy1/VLctC3OHpra8wgl+/oqLLzFj97HnTLiwE00cUSmRBgDuNxBPpgmfYe5DmXHa37kzIabARe5NzvG9sU/GdnozKds2ts3KnBQYXeGhQ8tuohkXUuHp7+mgmE6zFp6oclFr7B4ZMJZ2gsmNEza7REKsNV8vUzSeFv12rUWDp8uUOnN3At4PIF3J1jTCkhtxBBuWJPlxYtlmhGvhcwIiq49NFot6sfgpO5D7CyAWLeNzg97yM3HfZG18UM/x5lg45+LQ5D5pjHTKg3d3CKxulI3WhdZB2AYP6y43hMUVA/MnZA1Envlb6bw== 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=nFqwTS+IEIF8fiGePnW8TJ+NGVw52lopBfxN1fYrXtY=; b=RWTrPjMtyb40GxybQ30vdg0X6LULDcDFBzpxTAW/2nMMgkPpalSnpG7lXWo4boAhelaEJMO6C8myTqBrxptxDxLnxPqnVOEkY4nD7B2O0+Q4twZkMCLOFT7pqAEb2yjLejmUT6x+UzTOsmMORH/K3m7N21hKrJz4gTiMvMY00k8= 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 v5 12/13] qcow2: QcowHeaderExtension print names for extension magics Date: Sat, 6 Jun 2020 11:18:05 +0300 Message-Id: <20200606081806.23897-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b5c304ed-e996-42f6-b49e-08d809f232e8 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:88; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QbQnHcp6xwnny4mGS1oZ4eOP3JfQSHix0PEomjoo0XKPfOxJU0RMCIh03c2sslCWZmzNsG6avMnHVD6FlrGsqq8keDoit5b2WTaHbWKbaFS91KET8Sa1t/aMxdKXNRj1HkOf7z8q2qb9n69g23CixPdcmKtdh8VZx+VGyWLEoxG4HCa5YR4xG5gTLCS3TBwzYW/Ety4vPHLrDdYJ2O+RGEsW1MyoNfunomrLPfIS8N51ozIZ4vjUzsaSsXCFmrdUvVC4JMdU2qBvU7GBdzUGA1zYVXNyPSq2J1bbhyCS7rRI+D4P3ZRZJGgJ1aKIeqMnLelaq2GeapHwwiSw/147bw== 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: bghchejYWGjT0CnbTyPdVVHjQQeMLg8VLCC5cDmYkf2L0l7mAvW4Eio5P7watjGShTfzeaMjX4Za9zmGteY1PEFUj13TtYVrbspnwFZtUwDGwRmBxu3xAuEwymWP92o17f5sDFfP8oK4u50nNdV7ILzn8rmUXtpW7Do7MMAQmZYhO7ElS4R3IK+bPgF9QE/HrN56mr05A0Yf3oLiOlTUFhqrW4QMpGw/BFNThWtWFrA0FPO2VWYcGW0BZR1cE9+1nHmyNs9VMpOvRc/F4YHc1Uk6R5O/ZFFjikbxkOcfmLFrBhX6qmr+X49awTw7kExg2Ze8HJcsfFpGsu/2Be1MGFHtA3xkw3FXo8u3GYf+0dDBGJnCtDIvgQIG+2APDQlPZyMianeZZmsq/0VSHDTMUxQlRlvD6vPrg9H+Mo4cZcScCjWYCjnry9LePoZm+DjhEdd+rDdOjZD8D0ODMbT/BgsZ/E40d2OuQoNTIRmJfZY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5c304ed-e996-42f6-b49e-08d809f232e8 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:31.5395 (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: 66OMLWeIpEg75X9Uzu21Ko4wG2+chWP/9/wFIJfGnbUneehMLsYZ+7hTvY3wxLFFG07dKKfL7n6jt4HWesFSgAEI8OgfiPQssO/K4iEO2Ak= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.98; 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/06 04:18:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 --- 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..4b21d6a9ba 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 0x12345678 () 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 0x12345678 () 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 0xe2792aca (Backing format) length 11 data 'host_device' =20 Header extension: -magic 0x12345678 +magic 0x12345678 () 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 0x6803f857 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 0x12345678 () 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 0x6803f857 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 0x12345678 () 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 0xe2792aca (Backing format) length 11 data 'host_device' =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 Header extension: -magic 0x12345678 +magic 0x12345678 () 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..a9bed828e5 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 0x6803f857 (Feature table) length 336 data =20 @@ -37,7 +37,7 @@ incompatible_features [] compatible_features [] autoclear_features [] Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out index a51ad1b5ba..2f03cf045c 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 0x6803f857 (Feature table) length 336 data =20 @@ -83,7 +83,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 @@ -139,7 +139,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 @@ -194,7 +194,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 @@ -263,7 +263,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 @@ -325,7 +325,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 @@ -354,7 +354,7 @@ refcount_order 4 header_length 112 =20 Header extension: -magic 0x6803f857 +magic 0x6803f857 (Feature table) length 336 data =20 diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_= format.py index 32371e42da..40b5bf467b 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -39,6 +39,12 @@ class Flags64(Qcow2Field): return str(bits) =20 =20 +class Enum(Qcow2Field): + + def __str__(self): + return f'{self.value:#x} ({self.mapping.get(self.value, "= ")})' + + class Qcow2StructMeta(type): =20 # Mapping from c types to python struct format @@ -99,8 +105,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 Sun May 19 11:31:02 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=1591431960; cv=pass; d=zohomail.com; s=zohoarc; b=Q4Xn5lllOYwXD191HGjapMu0bh1jq5vtK3bETsB7w8HkKfDslhabQdgteLinPkPQVngfrrPU95dDZeLWcEVk2llQMvIAHUPx8rxiOMXsuF8N/zmCeiE8XBU+QFAS57v8XqluladiGqhP/+LuXc6hCHq93jV7fursS/4etCkEN4c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591431960; 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=S8WrTAImqkNl3ff8n2fReNLTjrH9tdrDbEsbM0Pq0xo=; b=JVBpJc2cXpsuGajqI6uMk+SnC1YFw1MkaUWkV249zVtjB0O1mNMEmR3yhWy+hyxG5ekRLQ26Jjfl+4uOCFQDys0BziYb40jH1FTdqDqqf5HuNX3hPvQKVlNJmBl0SulTEcf4gNvYcpUR7asWb1xBmYT3tc/tzA9YGI/TgS0jXlE= 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 1591431960950923.8375061090888; Sat, 6 Jun 2020 01:26:00 -0700 (PDT) Received: from localhost ([::1]:41446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jhU9P-0007uF-Nd for importer@patchew.org; Sat, 06 Jun 2020 04:25:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jhU2S-0003Uj-0i; Sat, 06 Jun 2020 04:18:48 -0400 Received: from mail-db8eur05on2120.outbound.protection.outlook.com ([40.107.20.120]:7488 helo=EUR05-DB8-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 1jhU2Q-0000Zf-T8; Sat, 06 Jun 2020 04:18:47 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM7PR08MB5480.eurprd08.prod.outlook.com (2603:10a6:20b:de::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Sat, 6 Jun 2020 08:18:32 +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.023; Sat, 6 Jun 2020 08:18:32 +0000 Received: from kvm.sw.ru (185.215.60.130) by FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18 via Frontend Transport; Sat, 6 Jun 2020 08:18:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J5ivt4Wj7W+UR7NZ3gk/EBvvI01EUAqmFw9qLIy2OwSEIe8X+rM22jGlYB3U/gpYRwcsambQPz5IQhkOSvFIXwy8IMgOK1F4z2nQezxpVg4te/N5kw1lltop5QYdX2MzTKP0iYIUhmLGHtireYb8MHOvmi6fAhdHB4KxEyi5HZ88SpwxukDelL8tFUtpC6EWCjdaa919UZX6mJQACrvCyupevEsKTH84Qm18IBY5qQXPK7L831PX02yExOMSK72MRm3MqAC4FRxpEJYSmoKdjq1ejwkyE0XtTeeObi/fufEbm9brVfyJNQkqGFgKC3Kbd04wBq+IW3bR2YLGYy2Xpg== 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=S8WrTAImqkNl3ff8n2fReNLTjrH9tdrDbEsbM0Pq0xo=; b=NZ/xrSHkfYlo+uYiq8x0JpFeK5eUwXs9nhAMXhe/MLWz7SiICFCqBemWOczIFEhAVgd8liIsfDQN8jo0cJnFFDwPs6lcxU7Eh9OovaFrjgVrlxeC/W2EHqa76m8moCSiNUAdARAaUJXxlrGFZXl5Twdo55c5nZt8JOlxzicKSQdI8mFIODhwQdCjG8Qs1gWk/rzcB71WiibwqVIMGKSppB2k9pR7Z8Wnz6054utbEbM7a+DR58iDOWPdnQoCJe61tgPFRqR2oJM3huuJFf8hmDyQ5vq4LZIXNxi9su9AZ83EbFlyDF5cLLsqB8n0BTSOFbG/kzOXmITId/9Tc6UITQ== 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=S8WrTAImqkNl3ff8n2fReNLTjrH9tdrDbEsbM0Pq0xo=; b=S6hNJ8/Zm9bnI6kYhU1cQH6+tFbDvlwu29bHRg1k0uhMsrC6MJzxC4KMygIHrbIYynuKTvM9ZVTCi8+nJk/pEDBIoo6Da5Mqz+maQXJwaRGYiF3MZOFcNIt8hO+84BxPhcENAM/hZ9IRnsPg4CD/Eh3YQqJ1ROrPgjJm+jmvVRc= 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 v5 13/13] qcow2_format.py: dump bitmaps header extension Date: Sat, 6 Jun 2020 11:18:06 +0300 Message-Id: <20200606081806.23897-14-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200606081806.23897-1-vsementsov@virtuozzo.com> References: <20200606081806.23897-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0036.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::23) 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.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 934a38d9-01fc-4884-d2af-08d809f23358 X-MS-TrafficTypeDiagnostic: AM7PR08MB5480: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-Forefront-PRVS: 04267075BD X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: b2t11qrB5Z0pMjmP3MB6n4qoVGWxLxYy+0QC0uc/HywZBD+pOaDj5kzik0v7P9VWNxblMe0RNXVaG81iRdecZDYs9Qq0oqYCt/kaTF/IUST6z+M/0xxaFABvTfJ2ckWcdx7kzr/UtNz1kUwiSs//fslbzw5Jmf0cYYTqOz+N53EZQRtv72mwuvlIqqHHgovjsBxjEfeiqhGYRBz0k0zb3VAghQAWhMIGa77LJ0OpT2UBFC/M7CVTKSwmEAq1YoFQcMyY4Tzn0yXZJ19OrJj7mByyQwG4fCvkSDlWqS9U5Ur4Vb8RUO40LoF1dglInkmOkq/UQFfkFI2dYabk2HdLZq0+ffMgO7ONZQSZiYLu/B1BOGMFUoSCxmQgVzf2qIxM 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)(136003)(366004)(39830400003)(376002)(346002)(396003)(107886003)(1076003)(4326008)(2906002)(36756003)(6512007)(66946007)(66556008)(66476007)(6486002)(5660300002)(83380400001)(478600001)(86362001)(2616005)(956004)(316002)(26005)(6506007)(52116002)(6666004)(8936002)(6916009)(16526019)(186003)(8676002)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: XcSM5+cqMbO6x3PN9Nd13rK4GzwIgjnR+sHxLK2BeZOvJ/qL9Y9Wi37dwtnjAbcIoZd1Nerv2xs5/9AIzZKhDobNeX9B+2MSYsr7tlYGSZMO7p61Bsey/BcHRz7YjsrHp2hhKeEkCKjSx9U61ddsKYdQjQOjSmhI/6TwG27XKOyosBNphQS6JRNqqbyjkxrhdu9Ksz5tmKYiolWTgFlZwr1jxn9dVHrRNa0Kz2UOLXX/XQRGAHJ0++P2BBW0EQyiRBfCuoRDG3ZMgnRW0nyL4DrEj0s/FHH3POUHCCrQXy+IfPnZHLF2y858rFtXnToEKT/KaY3f/HhBUO6PG6+HaNnAz6DIi2pOlGXPXdhDOxO3e6XLSiGAE54IrskweLxAYHacOKBoCb8R/tTcCP92I4K8lRWkHCRtYZgx7zz5HNUv3gZ9XJn5wS883/8k0w9EwL/qRviiiev76/HOKy4vdTSmcSN8q+8XAUWkR+G1cLc= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 934a38d9-01fc-4884-d2af-08d809f23358 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2020 08:18:32.2374 (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: pK581q4lhy/A0/pL/BzQU5WsFKnUyMSDicADW/grQhNtbTbLKZHa8AA9czCX8T/zErVTQiaif71DEIR6M/1yQiwlE21+uIdUaKlMybhmlAY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5480 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.20.120; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/06 04:18:29 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, 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 40b5bf467b..0f65fd161d 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -103,6 +103,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): @@ -110,7 +123,7 @@ class QcowHeaderExtension(Qcow2Struct): 0xe2792aca: 'Backing format', 0x6803f857: 'Feature table', 0x0537be77: 'Crypto header', - 0x23852875: 'Bitmaps', + QCOW2_EXT_MAGIC_BITMAPS: 'Bitmaps', 0x44415441: 'Data file' } =20 @@ -130,8 +143,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)) @@ -148,15 +164,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