From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id C82EA3858D1E for ; Sun, 12 Feb 2023 14:49:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C82EA3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gnu.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gnu.org Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pRDfN-0001u2-9N; Sun, 12 Feb 2023 09:49:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=In-Reply-To:MIME-Version:References:Subject:To:From: Date; bh=/IEtFq/SxVN3fumaC7T0U4jUOrjQqnH9RDXw7hP2Goo=; b=Nm6v/nLqaAkzBMP9pnlr 1TpOGTx4K2Jpy3EnGEGQSg2Tkk9ph1Zf7YtpTAs3hc9jZRFG4zb7nqK01+CPyMCcejtqYv9ZRZom/ EogbbrAQSF//mWtlwXJ/N2Qj/1uTnZrBRjRiE6DHUUMe8FyE/yfFO16HbI1o2Nz7v1YdzicfvTTXA 3qRbG5p95kVR5ujFQ+U+1onf+0+yaTOQHjZIFa5zCCQqS756z6c3l4iIiZ3EvxyfelorskdzSvW1c GT2g0aqc6/5012hpOcc7S+voepaz2y4Bf4HFqqd6lAeJv2tugK0XbD1qad7CxD1AzyFw4npshx/+i ANZJlSK6IFaYTA==; Received: from lfbn-bor-1-1163-184.w92-158.abo.wanadoo.fr ([92.158.138.184] helo=begin) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pRDfM-0000PY-JN; Sun, 12 Feb 2023 09:49:20 -0500 Received: from samy by begin with local (Exim 4.96) (envelope-from ) id 1pRDfK-004n2R-2v; Sun, 12 Feb 2023 15:49:18 +0100 Date: Sun, 12 Feb 2023 15:49:18 +0100 From: Samuel Thibault To: Sergey Bugaev Cc: bug-hurd@gnu.org, libc-alpha@sourceware.org, =?utf-8?Q?Fl=C3=A1vio?= Cruz Subject: Re: [RFC PATCH glibc 1/12] hurd: Refactor readlinkat() Message-ID: <20230212144918.7qfbstv3f6eou23j@begin> Mail-Followup-To: Sergey Bugaev , bug-hurd@gnu.org, libc-alpha@sourceware.org, =?utf-8?Q?Fl=C3=A1vio?= Cruz References: <20230212111044.610942-1-bugaevc@gmail.com> <20230212111044.610942-2-bugaevc@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230212111044.610942-2-bugaevc@gmail.com> Organization: I am not organized User-Agent: NeoMutt/20170609 (1.8.3) X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Applied, thanks! Sergey Bugaev via Libc-alpha, le dim. 12 févr. 2023 14:10:32 +0300, a ecrit: > Make the code flow more linear using early returns where possible. This > makes it so much easier to reason about what runs on error / successful > code paths. > > Signed-off-by: Sergey Bugaev > --- > sysdeps/mach/hurd/readlinkat.c | 55 ++++++++++++++++++++-------------- > 1 file changed, 32 insertions(+), 23 deletions(-) > > diff --git a/sysdeps/mach/hurd/readlinkat.c b/sysdeps/mach/hurd/readlinkat.c > index 1efb09ca..dabdbb37 100644 > --- a/sysdeps/mach/hurd/readlinkat.c > +++ b/sysdeps/mach/hurd/readlinkat.c > @@ -31,38 +31,47 @@ __readlinkat (int fd, const char *file_name, char *buf, size_t len) > error_t err; > file_t file_stat; > struct stat64 st; > + enum retry_type doretry; > + char retryname[1024]; > + file_t file; > + char *rbuf = buf; > > file_stat = __file_name_lookup_at (fd, 0, file_name, O_NOLINK, 0); > if (file_stat == MACH_PORT_NULL) > return -1; > > err = __io_stat (file_stat, &st); > - if (! err) > - if (S_ISLNK (st.st_mode)) > - { > - enum retry_type doretry; > - char retryname[1024]; > - file_t file; > - char *rbuf = buf; > + if (err) > + goto out; > + if (!S_ISLNK (st.st_mode)) > + { > + err = EINVAL; > + goto out; > + } > > - err = __dir_lookup (file_stat, "", O_READ | O_NOLINK, 0, &doretry, retryname, &file); > - if (! err && (doretry != FS_RETRY_NORMAL || retryname[0] != '\0')) > - err = EGRATUITOUS; > - if (! err) > - { > - err = __io_read (file, &rbuf, &len, 0, len); > - if (!err && rbuf != buf) > - { > - memcpy (buf, rbuf, len); > - __vm_deallocate (__mach_task_self (), (vm_address_t)rbuf, len); > - } > + err = __dir_lookup (file_stat, "", O_READ | O_NOLINK, > + 0, &doretry, retryname, &file); > + if (err) > + goto out; > + if (doretry != FS_RETRY_NORMAL || retryname[0] != '\0') > + { > + err = EGRATUITOUS; > + goto out; > + } > + > + err = __io_read (file, &rbuf, &len, 0, len); > + __mach_port_deallocate (__mach_task_self (), file); > + if (err) > + goto out; > + > + if (rbuf != buf) > + { > + memcpy (buf, rbuf, len); > + __vm_deallocate (__mach_task_self (), (vm_address_t) rbuf, len); > + } > > - __mach_port_deallocate (__mach_task_self (), file); > - } > - } > - else > - err = EINVAL; > > + out: > __mach_port_deallocate (__mach_task_self (), file_stat); > > return err ? __hurd_fail (err) : len; > -- > 2.39.1 > -- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.