Jeff King <peff@xxxxxxxx> writes: > 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.