From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,PDS_BAD_THREAD_QP_64,SPF_HELO_NONE, SPF_PASS,T_KAM_HTML_FONT_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF0E2C433B4 for ; Mon, 12 Apr 2021 12:51:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AF76D61246 for ; Mon, 12 Apr 2021 12:51:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF76D61246 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=eldorado.org.br Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:54374 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lVw2j-0001XG-DP for qemu-devel@archiver.kernel.org; Mon, 12 Apr 2021 08:51:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lVvzd-0000w4-Te for qemu-devel@nongnu.org; Mon, 12 Apr 2021 08:48:41 -0400 Received: from mail-eopbgr800132.outbound.protection.outlook.com ([40.107.80.132]:38848 helo=NAM03-DM3-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 1lVvzb-0004sf-R2 for qemu-devel@nongnu.org; Mon, 12 Apr 2021 08:48:41 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YcMb/g7TF12rPFaJaiBuS4gUzYs+XwDBopZ3ff1oC256M+NhnGjXgmS73iemFnH5ATsDahyw9F/Cyy5zuxcwB9LRW93a8WQKIKo0oSD6KEn3KX8kjzPL7zeZsKHyU9yeehGBnDWuoQtHg8dGKiBWGTMzIQYK1eduinHA1wluwzwmKSCU9/RaJUnkFxV/QzvAv5+JXh8Lci8yW6NGptat6D1FhyouXmhgA+jThXnozOQ5X6s7Awi2UbLkGFzInDH71KiV0L9kLqu8RE96L7QroedPYvt8QJgsXkngywiY9+INNmbah8RtRVtEJXO4xSTYKCY3mKZTYtYy6MpFkRQDuA== 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=sGJo5ni5yMLrnXV2bLIWDs0hFfm4aAfVAelQTfyebEo=; b=hjo6j7VnEJ43M+ui0M0nWNo/Ze9W5nt0g7O5lgXuCKUqq1qdHYtQqT7ldNOm5as+Ppfhl8y4A2qD35+1Z9kywPB/rWfZeGNIZ34YYvs22mMsj28jBWAbCx2QSrCy3ZjLzg3MGKqOssH8vkAXNH86/95rbtAc1IbWOl9Uiihs0Iwv4scFSExXCG/l+4/JDMfjE/zEqGYGEN5/D4j5oPBMdPiZ6VLq29DZZ13uHLJpfTitLVLEJ34CHS+jUngc8+LBQIkvEql4OyqnilqSxok/Nk11zTN+8ajBxukVNZ0othdffa2+uEBLw1XgJ/BVSSZYDoFY4iI810bmRPlREqBTaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eldorado.org.br; dmarc=pass action=none header.from=eldorado.org.br; dkim=pass header.d=eldorado.org.br; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eldorado.org.br; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sGJo5ni5yMLrnXV2bLIWDs0hFfm4aAfVAelQTfyebEo=; b=l3MAnRbjGJgwKo6to/N2OePgP41johNfLAB3LKRn2cyhSXNBSRMLotxljQjNLqRb7D4vy0usABgknGpe+OPg4mO0kRbafY09WJHsHpYqYabGWRGj7Mxpa3AhBeXFpM1v4529Q+k+SxiuYE+x01jymmknvqszeP9efo/+F49qo+XGPHe7tieWLZbMXlhyoVh4Kb+PdM6lZJRwQUHKJoSMStekOlrhy7sGu9nnqBzA9Fa0kFhAusVYsKXp90PhpoMaE4E81tlu7N8+WQrXvADv17XYPAm3NzFkH1UjOpaFkfP7h+LBV8JTq9bgvvCKxq/TBbiQnlad8UkuLxkwTyQ7Fg== Received: from CP2PR80MB4499.lamprd80.prod.outlook.com (2603:10d6:102:45::19) by CP2PR80MB3873.lamprd80.prod.outlook.com (2603:10d6:102:2f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.21; Mon, 12 Apr 2021 12:48:35 +0000 Received: from CP2PR80MB4499.lamprd80.prod.outlook.com ([fe80::8c79:76c:3d1f:d59b]) by CP2PR80MB4499.lamprd80.prod.outlook.com ([fe80::8c79:76c:3d1f:d59b%7]) with mapi id 15.20.4020.022; Mon, 12 Apr 2021 12:48:35 +0000 From: Bruno Piazera Larsen To: "qemu-devel@nongnu.org" Subject: RE: Better alternative to strncpy in QEMU. Thread-Topic: Better alternative to strncpy in QEMU. Thread-Index: AQHXL5omkZuxql7c7kqwov5c35bNVw== Date: Mon, 12 Apr 2021 12:48:35 +0000 Message-ID: References: In-Reply-To: Accept-Language: pt-BR, en-US Content-Language: pt-BR X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=eldorado.org.br; x-originating-ip: [201.82.34.226] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1bdbbf2d-cf0e-417c-79c0-08d8fdb14955 x-ms-traffictypediagnostic: CP2PR80MB3873: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: y426ar8FdT2SUtQfYUCSa9lbR0L+w+5yoJLymj+re7qBc6ORKxqUQDuxn/y2JOupF7a6Lncbaw69/A6FNnA+w/UUgWV62Y5Oyymm2G0X//UK5YTL9bTgHm3dmQ5sIOxfGKpGF4VrimTeFrPBHMr9/FOz5QLjs5OhGZv9GMQUNM29v9pscut/dS2IU+nz6XSOHgUqMX669vcRxE/J2Bcp7qdzI/Jo2wPGtdi8y0mUZOWZ79bBHdB9DMOljZMvbWNk3wUOlmnzbwdI6LuyEDBJEwMGX+v1q80AQsrO1krRnkUL71oPqCo9PO6cZ+z4no5pf/5Q647QxLifacp3eQAf9mnZUYvNPhpNHI6KMo13SR99Xap3zFNLNDcDBBzepLE8jnS+bhhopeAEUKsjXiwYaKRTjPachEJ5Eql7vXyHYIMRLV/BthSfxYU+aiD+6QswenuqPNhz3eDENR1aJ43eTFfROg2yGPgKkTAR/tkS4bj7F2Psh+qLRvpzv1Hzn+7Pheasymg570uPxCDRh201iPsjGpesA+ikyCQxMflBCNUbiU5xY7ytq2EFiTjrJ+UifRLdLMrBLK5H4NMlNvZ4Csm5mLEH4K91xFUe0WDDLXswlVe9bnXnQRXeyM6SyImUfXvT48KpcIJikB9II26CHQ47SDNn9oBqs2uDjHBlpktQDkyCnCGgjSRFNPUTZfjd x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CP2PR80MB4499.lamprd80.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(366004)(346002)(39840400004)(136003)(396003)(71200400001)(9686003)(55016002)(66946007)(21615005)(26005)(66556008)(166002)(7696005)(66446008)(66476007)(86362001)(64756008)(76116006)(5660300002)(6916009)(316002)(52536014)(6506007)(38100700002)(19627405001)(2906002)(186003)(33656002)(478600001)(8676002)(8936002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?iso-8859-1?Q?cNry5MVt/WkEWT0NpJPbTxHj5hl3ztIaR6H4oIXeCKDkV0gIxUpYVQjNwN?= =?iso-8859-1?Q?KcWxBUaKQpLW8/+/aLleZFQ2BbGOGTG4qB69qXxGaeAxY7ar0rkUMcfqws?= =?iso-8859-1?Q?T/FhO+0QtFwsR0xeeFzhmkwl42U+py/Wxo+J/sIxsrWxjPXrfD148TAIJC?= =?iso-8859-1?Q?dz0s/UhUIaxS+KkERo5Th8yQBp4eVCCeFa86DlUVT9XbBo24fRsz2Ang8Y?= =?iso-8859-1?Q?/ZYwl0l2qKwviyhGBQkhGHxFkEfJ0VH3VW+JCnF4C1N3XxTFZ39TBrzXfI?= =?iso-8859-1?Q?TQyNGMq3VqZBgY5pU5zg2ZZGRA7hM50oz52DDI7sHeCLaGKR0ZdOjde3YS?= =?iso-8859-1?Q?mzNChOya3z2j9swsMSPYroDXIFhLZNx6GifjutliSDyY25gIaXExSfMXm0?= =?iso-8859-1?Q?lSVo7qJPFzbSXke9OXwHA97vDOlfoDsNY2MW2ZdUZDicfpMiMa7bEC+tZ+?= =?iso-8859-1?Q?sUd7bn8PbQtmSA94LPPFGlhOM876w4Ln1sH+1MUyTZhniCI5uJ0pUCtPak?= =?iso-8859-1?Q?mv5pEArIfjNMw23pHhuSlug1ORZGFABxd9CZQHd2tHlGYu6GI990X9390o?= =?iso-8859-1?Q?15do6wID67hyFZVJTIGdVMuQ0rA08iKuOCrQgXJ0AfiB71jXd12GnAvJzT?= =?iso-8859-1?Q?jVGhR4ufSqWfqpWrDcZUdLHGB7zawSMOGrnvJ24MBNCH/0GXQAmG2LHbtn?= =?iso-8859-1?Q?DflDyX1pBzRA0xQEMXnGL3Ami/l131rzFPM1kk8SgPwgQycKVgVtdg5gpL?= =?iso-8859-1?Q?SMrPoP5n5NsTACzxMEuhk7GhUI7+MGlpysG8eV8+3WmdqruxU0Aj7XeJfn?= =?iso-8859-1?Q?Y6wd9vt7cyyUK6n/W4NeLo/RsoBvBeOsHImT1E00yA4xo9keBHy3bRPNKj?= =?iso-8859-1?Q?RrOAbPt1fYY/cPC39ixovzp4iNQit9m6Wo2KWMDxCXOoS1U8mnx9PtkJ2J?= =?iso-8859-1?Q?d3TryS4rL2yWsC1DIJo9UwdurALbQsfaj1cWigesKnaeklZeLWORKw8KQI?= =?iso-8859-1?Q?dC5E2NIZUJjsy25hL6EeMxV8+sUL9HjmEGNx5wxW3w7b/RimCy7xEl6n9e?= =?iso-8859-1?Q?OUruEonh8ogjorfYUpkDiH/LgnkwCgDhJePtoePlGYxw3/Pde8yyx3Hc9F?= =?iso-8859-1?Q?nMJSVW2R+r41emSGPJwwFDgKC0loxnGMStWmv4xstjcciQzhDjhEubsqOV?= =?iso-8859-1?Q?aEyS5rjufzAxb8ZvqKtAH4Gf++tnt9ahwSxTxU9Cqy8j+2A/MeuFb17gJN?= =?iso-8859-1?Q?60e9/qv5BY0k7ZVUVz1dC9cW0n0YWlXUt2JjqZaVlmABUl3kyIpJHI0m10?= =?iso-8859-1?Q?l6p+h9xERCM4DuIwXbGya/fsWSwqy2JMV+IuZn8yEDbEbPE=3D?= x-ms-exchange-transport-forked: True Content-Type: multipart/alternative; boundary="_000_CP2PR80MB449967665168242102F3E397C7709CP2PR80MB4499lamp_" MIME-Version: 1.0 X-OriginatorOrg: eldorado.org.br X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CP2PR80MB4499.lamprd80.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bdbbf2d-cf0e-417c-79c0-08d8fdb14955 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Apr 2021 12:48:35.3053 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b9397c69-e827-4afc-a365-ab275e41638f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2A8/HJSs0au8eDGpDJjQta0D1fMtT6/6jo4J57TTbFsDvTJWMZptDJueIgp9Go5cfbyEz/ZKArv81JOmO9peZS5IzOD/PNgRUUqZN/nIF+E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CP2PR80MB3873 Received-SPF: pass client-ip=40.107.80.132; envelope-from=bruno.larsen@eldorado.org.br; helo=NAM03-DM3-obe.outbound.protection.outlook.com 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01 autolearn=ham autolearn_force=no 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: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" --_000_CP2PR80MB449967665168242102F3E397C7709CP2PR80MB4499lamp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Im not sure about what "better version" means, but my guess would be a fast= er or more reliable version. If that's the case: > for (int i =3D 0; i < strlen(source); i++) { Since you're going on ebyte at a time, there's no need to know how big the = array is. As a stopping condition you could use source[i] !=3D '\0', which = is one less pass through the array. One other optimization that could be done (but is a bigger headache to impl= ement correctly) would be to cast the char* into uint64_t* (or uint32_t* fo= r 32-bit systems) and copy more bytes at a time. The headache comes from fi= nding a 0 in this longer variable, but you can probably use a similar strat= egy to freebsd's strlen (https://github.com/freebsd/freebsd-src/blob/main/l= ib/libc/string/strlen.c). I'm not sure if it would be a real speedup in most cases, since glibc can u= se this strategy already), but at least we'd have consistent performance in= case some system doesn't use it Bruno Piazera Larsen Instituto de Pesquisas ELDORADO Departamento Computa=E7=E3o Embarcada Analista de Software Trainee Aviso Legal - Disclaimer --_000_CP2PR80MB449967665168242102F3E397C7709CP2PR80MB4499lamp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Im not sure about what "better version" means, but my guess would= be a faster or more reliable version. If that's the case:

>     for (int i =3D 0; i < strlen(source); i++) {

Since you're going on ebyte at a time, there's no need to know how big the = array is. As a stopping condition you could use source[i] !=3D '\0', which = is one less pass through the array.

One other optimization that could be done (but is a bigger headache to impl= ement correctly) would be to cast the char* into uint64_t* (or uint32_t* fo= r 32-bit systems) and copy more bytes at a time. The headache comes from fi= nding a 0 in this longer variable, but you can probably use a similar strategy to freebsd's strlen (https://github.com/freebsd/freebsd-src/blob/main/lib= /libc/string/strlen.c).

I'm not sure if it would be a real speedup in most cases, since glibc can u= se this strategy already), but at least we'd have consistent performance in= case some system doesn't use it

Bruno Piazer= a Larsen

Instituto de Pesquisas ELDORADO

Departamento= Computa=E7=E3o Embarcada

Analista de = Software Trainee

Aviso Legal - Disclaimer

--_000_CP2PR80MB449967665168242102F3E397C7709CP2PR80MB4499lamp_--