Re: [PATCH v2] trace2: refactor to avoid gcc warning under -O3
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 20, 2021, 00:20 UTC
- Message-ID
- <xmqqim3ew905.fsf@gitster.g>
- In-Reply-To
- <YJrIMbr6VkYGQMfs@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 36 quoted lines
> I also wondered briefly why we needed the out-parameter at all, and not
> just letting the caller look at errno. The answer is that we need to
> preserve it across the close() call. The more usual thing in our code
> base _would_ be to use saved_errno, but not have it as an out-parameter.
>
> I.e.:
>
> diff --git a/trace2/tr2_dst.c b/trace2/tr2_dst.c
> index ae052a07fe..bda283e7f4 100644
> --- a/trace2/tr2_dst.c
> +++ b/trace2/tr2_dst.c
> @@ -204,15 +204,16 @@ static int tr2_dst_try_uds_connect(const char *path, int sock_type, int *out_fd)
>
> fd = socket(AF_UNIX, sock_type, 0);
> if (fd == -1)
> - return errno;
> + return -1;
>
> sa.sun_family = AF_UNIX;
> strlcpy(sa.sun_path, path, sizeof(sa.sun_path));
>
> if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
> - int e = errno;
> + int saved_errno = errno;
> close(fd);
> - return e;
> + errno = saved_errno;
> + return -1;
> }
>
> ...
>
> I do prefer that approach, since I think it's more idiomatic for our
> code base, but for the sake of wrapping up this simple fix which has
> been discussed much more than I think it deserves, I am OK with either.
> :)I think this alternative is more readable as well.
I'll mark the topic to be "Expecting a reroll" in the what's cooking report.
Thanks.