From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wVLmFXSIsmpg9TIAWB0awg (envelope-from ) for ; Tue, 22 Sep 2026 09:53:56 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 545361E06B; Tue, 22 Sep 2026 09:53:56 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 45B1C1E01F for ; Tue, 22 Sep 2026 09:53:55 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C7E354BA798F for ; Tue, 22 Sep 2026 13:53:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C7E354BA798F Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011010.outbound.protection.outlook.com [52.101.65.10]) by sourceware.org (Postfix) with ESMTPS id 0DF044BB1C22 for ; Tue, 22 Sep 2026 13:52:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0DF044BB1C22 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0DF044BB1C22 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.65.10 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1790085145; cv=pass; b=PRZS0pqT/MjTpqVz5/OEXTku5JOuKH8DL9FBte2Mb4QViXzlu7QrZ0Og/gFWwDafvRFyp2Ft+5CCx98+2/K3VlivXaMLo17I5MtkKSxzQhPU9wV1ZwRrTgU5asypVA9xGWrUnDIosox1revfdYsKsVZ9X3AAY8Kxt2/ilMZ4hpI= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1790085145; c=relaxed/simple; bh=uRsx/F0ICPJQnr+CSfNMy4z+UeLQmDWcuDEZiDjVd/E=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=SqJLz3Zu0yJsdA2DSiezlitX6PbW3WyZITMM3L5khomS3uzxq1eH/RHHOy5Z8JxjclRlFNV+YMNThuO04N0UpUWbH+qVVNa3RDo0r8/uxvLSDaRe+irR5BcVr97kIMZbDBXwfBVhz6l4y5wtcH8llQ7bnmayQmTvwXn6yV5yQM8= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=bsohUxMT DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0DF044BB1C22 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=e1pyNBsVywN2Rs6TKVKbLe9j7UlLhhcTDo51t4EHLOCVSjPuUoXyPyYTzUxrlE8l6cVErWJyo6OqqvQVGhakImDfscsXrdqcjtlYpLORsovv+kI5ICS33DgLBh40T6UAx5i4X3Nbmti9tb6AR3afFpyWW/pR+rSNuEAiKqYdHNt9JLBbozohBQB+biwkjpFu4i/YlCnHLvjEq/cqLphx1pPSGxzc3KhJN34jSam6X+7+GbZcL7lc5su55YiibwEGTQEzYgJP9YswHP1E1rnY9M3k38okGpZOwZi5kL1oW96Biu6OoyVDaYbni7MDMcLXiyMDsR68bksBb3S9Onev5g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bRV0BKXv5Xc94dAjjvVDq62gxXENxoLZkhKKsPEmzvM=; b=eMfNJgnLnC5MMeS4Op2YE71kZWdcXTgaM8OJ2HCR+ROACdU6TV18/SfNskD2gmkcV8+2XnjDZ9TgM61zXJc9p0n3zrynPkGhcE0hxaxLuoHVxbJbgvpn2flFlnYOxV16TRWbPYWhJentb5ZoFXTUBEXEisliqMcaGrwyshA9ptd6pTSyqfyvWfPkEIcoaaj+xpBM8V7I/zDQy4LE3o9/j+Qwhn6V+YNrxONhMVA2dSv6W8Jh+uHtlsSb5FsohePKDUu4XZLVfAGr6FefyWA6mk6WbvFWoVwT6DDs/GnIsr6I43cqyb/eWxJc+r9zW41GvsqMVAaIFSAOCoXGz04e3A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bRV0BKXv5Xc94dAjjvVDq62gxXENxoLZkhKKsPEmzvM=; b=bsohUxMTW4knHPM9uxTHvVHLTosR+aTE5yFotLjfn0HjNEHRZLbF5EHx8fKxW6h3MivfORtA9UBEYyjZvGNnPZN0GpPtctlCgB/XFjEKalliJ54zmIopu4nbx8nJDW1OxXmH9egs/vzXBzwulT/i9T/hDtMXZbUXQE9KdNqMLYI= Received: from AM8P191CA0003.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:21a::8) by FRZPR08MB11190.eurprd08.prod.outlook.com (2603:10a6:d10:139::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.13; Tue, 22 Sep 2026 13:52:15 +0000 Received: from CPH1EPF00000529.eurprd05.prod.outlook.com (2603:10a6:20b:21a:cafe::2) by AM8P191CA0003.outlook.office365.com (2603:10a6:20b:21a::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.13 via Frontend Transport; Tue, 22 Sep 2026 13:52:15 +0000 X-MS-Exchange-Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by CPH1EPF00000529.mail.protection.outlook.com (10.167.241.164) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 13:52:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XZqO4CrFCyQMAHKB8LNXlJxrVk8szJjnPLPbtuZvh/y0+C7cszNOaoxBjErG7PWsnddn8HTYsLPQfzACr2NO28DTPvJymuGAOAd3DFs0xN2wQziIiJPkgxDaKzooabES/CY4pcla9pxekcAxinCcmdnzCp/Ndo3OKeyhW8mgB6dOPVzAe8cd/vbyJd24v5CWEMT39EZrkjC3nVBqB2ujuj8e7N/pp4qXc/l1vzqc2J3OiZDwlnzknxmq4YN1rpOd3ZbJ+G2SJ2kdJ1KeTP7RU8gMiDjZhWF24fDC8lolO24/kASp27ONHDrTrVvbPAruE8yzyKwEyL/HY3oVbdUG4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bRV0BKXv5Xc94dAjjvVDq62gxXENxoLZkhKKsPEmzvM=; b=K2hzZ7FDEBpUh3s1mc0oRHVIDYCC6LCpmuJWqN5MOW9QtjCVdcwvK6b7kbrOxPej0wy0ozZMUzhSeHImhtMA50X/4eF9zpONdtzGrEZsxu1gOVIDhVVToFEub7jPD5aR5rZAizcycHe29EyPVHwXcv6xrl6oUaLzY2i2LAx6upRr6eFAYK1AKvPz2gf4u7s6mgkHZnicGIIcnrm9Im5hjKeOpLGgQoIbmmRCAtsiHXzEYi47eLArpAuB4sipzcU3ViMLFHNbt6DWgm+HT/6u23zXxF7qrSK5RUus1doI7VTakZwoHgC3u8bJg+HBRxh5EOxEx+CjCzNvDHig488auA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bRV0BKXv5Xc94dAjjvVDq62gxXENxoLZkhKKsPEmzvM=; b=bsohUxMTW4knHPM9uxTHvVHLTosR+aTE5yFotLjfn0HjNEHRZLbF5EHx8fKxW6h3MivfORtA9UBEYyjZvGNnPZN0GpPtctlCgB/XFjEKalliJ54zmIopu4nbx8nJDW1OxXmH9egs/vzXBzwulT/i9T/hDtMXZbUXQE9KdNqMLYI= Received: from PAZP264CA0213.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:237::19) by GV2PR08MB11721.eurprd08.prod.outlook.com (2603:10a6:150:300::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.9; Tue, 22 Sep 2026 13:51:40 +0000 Received: from MA3PEPF00000405.eurprd04.prod.outlook.com (2603:10a6:102:237:cafe::83) by PAZP264CA0213.outlook.office365.com (2603:10a6:102:237::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.14 via Frontend Transport; Tue, 22 Sep 2026 13:51:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by MA3PEPF00000405.mail.protection.outlook.com (10.167.241.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 13:51:39 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 22 Sep 2026 13:51:39 +0000 Received: from PF4S4363.arm.com (10.0.144.159) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Tue, 22 Sep 2026 13:51:38 +0000 From: Matthieu Longo To: CC: Andrew Burgess , Tom Tromey , Matthieu Longo Subject: [PATCH v3 4/8] gdbsupport: add extract_next_field helper Date: Tue, 22 Sep 2026 14:50:46 +0100 Message-ID: <20260922135050.236941-5-matthieu.longo@arm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260922135050.236941-1-matthieu.longo@arm.com> References: <20260922135050.236941-1-matthieu.longo@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: MA3PEPF00000405:EE_|GV2PR08MB11721:EE_|CPH1EPF00000529:EE_|FRZPR08MB11190:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c439c54-654e-4d95-309d-08df18b0b5c5 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|82310400026|1800799024|376014|23010399003|36860700016|11063799006|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info-Original: 97Htn8GNTdsY49lGSC0cua5h+rloqcotMY7/x9OsqrO4joLQnSVN9lCj8r+ZQ5l2MnX8SMK8FdSI20mCkbyk8hi51dZz7P475oCm9+tk2HhD2eYMPgZuawTwK4pXBFriHkVzQHC+l7xOeIDBuXTNo/V8qWedrR4mMLrxD5Y350+WURVLyrtBU4k9deiWylpS7zTLQxXhHGLTqeXM7rd5aTdkq66dGjM/h3xOo7BsKoLDblBTQjN33w1VJVWOIlGUqIeXqF2UBsTaQGczvUhaSKF3o7Re242bB1cnaiVPfEhtdI9/5m/in9mB+UhPhM1poEVXZvnIHZHbWuxKyrG66bbOrPPcfVqcecp8gaj9m8SXtx7OulvUeTnL76mfmde+A4Z1jXd6oea1/+3JQichFPrMz/n0HlUOW6WxjeXBMNi4weu94h3A2wpJyjbO+f+N1LSSwXsHSdlRXPeMzWei97aH+PmlZSQAgcGoTFV/d1v7CXmLKkqyZA8AozXbjbM3YsDe5wi/5lMJj7XREx7fIdcYe9v5+uqpceoI8kmmb8jfDSw2gbQZczkhwuNKuNi6yxF0GaVwlGr0rRioiUz2NRMaHFbpZbWAW6tGYlLirMJA4XWjfw1HkOLCdJqMnN8or89y6BRdYjbJzWgWltrU7SoSSS+EWPuyQYj8vOAZlrzP03SzNQWcg1xhugEoQlbPsTdCEs3WCs1H0dAHmTCE4g== X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(23010399003)(36860700016)(11063799006)(10067099003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: NQrjvmwPta9Qa9PlPFC6gUAgoRgjwHem1bltMHBJuoVXd2nuWC3xadFR+W04iVojFJMY9lQKzoo5BxsckX1zcVH2ovuihf3qSRCTzyt/Qfjo7k79wHRNxFrGcGgNf/96RausQrBK0/BPrpbymZB+LDQ7wwoaOCLx6TsePyLi5lFcgfY/6bHjKEOnDv1+ZEfi2zKLz7+PBQ6bLLUk9c3Wm589fiQIm0xS6GWneojFs6HQmQkEfArI7ft88Ucn5JU6e2ToFd3uCHW0xyThGUzzzvE1HBNCSgbZblMa0+thezWIAcDxR2ZM6unI3vplWpjScFYwBrQZyvmyGcJe0ankXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB11721 X-MS-Exchange-Transport-CrossTenantHeadersStripped: CPH1EPF00000529.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: f3aece93-3166-4def-3264-08df18b0a0b1 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|14060799003|35042699022|36860700016|82310400026|1800799024|23010399003|10067099003|56012099006|22082099003|18002099003|11063799006; X-Microsoft-Antispam-Message-Info: GnXrGpXPhnag1zOrW6m7QRE+8z+AmE9x891GdnJE3t9WDZKJVUp+wt+RTf7rkeWmYp2JFK7IXsvUX4GsEMeqjp7UQ2LyodR8g/Wjo5NapH6w1eGsGNwSncFcTYYqKtV0eVLoI9sqJeleMKwPcYn9eq7PV2pLWwzcxi6fdCnf38K+83phi+Cj8gZR0SCk+ogem7dA+IqCsrCyjWd1619BUB0LLhQ3uDv9UQ3Gs3GtWDprFI/r8CrlG48L3nN13pFufAzt9MEgHKIax8zPVDsZorUllXNm8roD02vp6aY97pTwAP0Y7Vl753IqiD0MU4cXGCI3x55L6+R2idXVSQ6cMrUei5KrnL2fMI/72b7nsP/c7xfg6KHP7HeLvEiu7MabOmbGshW4fF+u5836HnfrbJjKfuFz76vo7VoXhlyrdnrqylHKHW1PnPT+zDNNMFN1qQNPDWZtoPLRz+TeWzYPSRRbCyOIOGJdHExPSKraOqyurp3Xp/de5mWCIDmBT9655Vy+nYWGtz0smI4/OYBat8YaW5b38CHZJW8DKlcWJmd+zI3Qs8h9IB7mBmek4PnrLDfgurdA9tXFbyRDRuN/aIYFT+IBFitpPn1Gja1n4mpo8qOBDRbe5eSCNDOtLDT1bNpbeNLL3xcrFXkx4zvge/moGsE3rb+Uc/iZbX448NyUReYXM6yAQYNv2QmW7LkRaIC/hWBpSCRXPs4hz5psLA== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(376014)(14060799003)(35042699022)(36860700016)(82310400026)(1800799024)(23010399003)(10067099003)(56012099006)(22082099003)(18002099003)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VXixTfen/YSkwMldB2XRuglUU3Bda7tgO18occhCK4Vce7I4sRd2X/2Mt9Gdee86bJoqC7a+dhTCZ4dP3dksKWDKcN6V2hIiQ5mbxla26v9KHS40xXpOHxswJlOtCtpG8KLB8GgRShcBcDw+bsBKzObEDK12oNJu2yILCayTj2hGec6IjaVy2Y6GAPOWy7TqB3Y6ZSr+1O+QqBsPTNvToZ5Jo5HxtJ6MTibjBajuXZ+fLbedScGuQmyazjSrKBqT4Yz7Nxm/xRwnNkKjk6O6xcJgATUaZSwhusXvleW0feVpIw176RvanNIxfVHjwlgP/j5MX5QKPUXhN3vNidZBQ47qchR6hCNxx7E4WAnLSnWNpXPgbDeECzdcfLSPf8Xs5VN9u57S3u91VHtgKuwI4vRsrQ6v2p3+rw92bk5pvt2+TenRCORspjv5u8EQgOyR X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 13:52:15.1403 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c439c54-654e-4d95-309d-08df18b0b5c5 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: CPH1EPF00000529.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: FRZPR08MB11190 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Add extract_next_field, a helper for extracting a view from a buffer up to a given separator. The helper also returns an iterator to the beginning of the next entry, skipping consecutive separators. The helper supports views whose value type is 'char', such as gdb::array_view and std::string_view (from c++20). --- gdb/unittests/common-utils-selftests.c | 32 +++++++++++++++++ gdbsupport/common-utils.h | 50 ++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/gdb/unittests/common-utils-selftests.c b/gdb/unittests/common-utils-selftests.c index eb9c83616f0..bbd8b00a2de 100644 --- a/gdb/unittests/common-utils-selftests.c +++ b/gdb/unittests/common-utils-selftests.c @@ -19,6 +19,8 @@ #include "gdbsupport/selftest.h" +#include "gdbsupport/array-view.h" + namespace selftests { /* Type of both 'string_printf' and the 'format' function below. Used @@ -125,6 +127,34 @@ string_vappendf_tests () test_appendf_func (string_vappendf_wrapper); } +static void +extract_next_field_tests () +{ + auto bytewise_match = [] (const auto &s1, const auto &s2) -> bool + { + return std::equal (s1.begin (), s1.end (), s2.begin (), s2.end ()); + }; + + std::string s = "\n1234\nabc\n\ndef"; + std::vector expected = { "1234", "abc", "def" }; + { + using view_t = gdb::array_view; + std::vector lines; + view_t buffer (s.data (), s.size ()); + for (auto it = buffer.begin (); it != buffer.end ();) + { + auto [line, next_line_begin] + = extract_next_field (buffer, it, '\n'); + lines.emplace_back (line); + it = next_line_begin; + } + + SELF_CHECK (expected.size () == lines.size ()); + for (auto i = 0; i < expected.size () && i < lines.size (); ++i) + SELF_CHECK (bytewise_match (expected[i], lines[i])); + } +} + } /* namespace selftests */ INIT_GDB_FILE (common_utils_selftests) @@ -134,4 +164,6 @@ INIT_GDB_FILE (common_utils_selftests) selftests::register_test ("string_appendf", selftests::string_appendf_tests); selftests::register_test ("string_vappendf", selftests::string_vappendf_tests); + selftests::register_test ("extract_next_field", + selftests::extract_next_field_tests); } diff --git a/gdbsupport/common-utils.h b/gdbsupport/common-utils.h index de83a715ac4..a4042b24644 100644 --- a/gdbsupport/common-utils.h +++ b/gdbsupport/common-utils.h @@ -279,4 +279,54 @@ struct string_view_hash } /* namespace gdb */ +/* Extract a view from BUFFER starting at START. + + Leading occurrences of SEPARATOR at START are skipped. The returned view + extends from the first non-separator character to the next occurrence of + SEPARATOR, or to BUFFER.end () if no separator is found. + + Return the extracted view together with an iterator pointing to the first + non-separator character after the extracted view. Successive separators + are skipped. If there is no following non-separator character, the returned + iterator is BUFFER.end (). + + If START does not point into BUFFER, return an empty view and BUFFER.end (). + + ViewT may be gdb::array_view or std::string_view. The later requires + C++20, which added the constructor taking the range [first, last). */ + +template +std::pair +extract_next_field (ViewT buffer, + typename ViewT::iterator start, + char separator = '\0') +{ + static_assert (!std::is_reference_v ); + static_assert (std::is_same_v ); + + auto next_start = buffer.end (); + + /* Reject a START iterator that does not point into BUFFER. */ + if (start < buffer.begin () || start >= buffer.end ()) + return {ViewT (), next_start}; + + /* Skip leading occurrences of the separator. */ + while (start != buffer.end () && *start == separator) + ++start; + + auto it = std::find (start, buffer.end (), separator); + + /* If no separator is found, the remainder of BUFFER is the final string. */ + if (it != buffer.end ()) + { + /* Otherwise, skip successive separators so that NEXT_START points to + the beginning of the next string, if any. */ + for (next_start = std::next (it); + next_start != buffer.end () && *next_start == separator; + next_start = std::next (next_start)); + } + + return {ViewT (start, it), next_start}; +} + #endif /* GDBSUPPORT_COMMON_UTILS_H */ -- 2.55.0