All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: Collin Funk <collin.funk1@gmail.com>,
	 git@vger.kernel.org, shejialuo@gmail.com,
	 Jeff King <peff@peff.net>
Subject: Re: [PATCH] wrapper: Fix a errno discrepancy on NetBSD.
Date: Fri, 02 May 2025 18:05:14 -0700	[thread overview]
Message-ID: <xmqqtt62sdv9.fsf@gitster.g> (raw)
In-Reply-To: <aBVp51yLwxBpRskt@tapette.crustytoothpaste.net> (brian m. carlson's message of "Sat, 3 May 2025 00:57:11 +0000")

"brian m. carlson" <sandals@crustytoothpaste.net> writes:

> On 2025-05-02 at 23:33:32, Collin Funk wrote:
>> As documented on NetBSD's man page, open with the O_NOFOLLOW flag and a
>> symlink returns -1 and sets errno to EFTYPE which differs from POSIX.
>> This patch fixes the following test failure:
>> 
>> $ sh t0602-reffiles-fsck.sh --verbose
>> --- expect	2025-05-02 23:05:23.920890147 +0000
>> +++ err	2025-05-02 23:05:23.916794959 +0000
>> @@ -1 +1 @@
>> -error: packed-refs: badRefFiletype: not a regular file but a symlink
>> +error: unable to open '.git/packed-refs': Inappropriate file type or format
>> not ok 12 - the filetype of packed-refs should be checked
>> 
>> This portability issue was introduced in Commit
>> cfea2f2da8 (packed-backend: check whether the "packed-refs" is regular file, 2025-02-28)
>> 
>> Signed-off-by: Collin Funk <collin.funk1@gmail.com>
>> ---
>>  wrapper.c | 14 +++++++++++++-
>>  1 file changed, 13 insertions(+), 1 deletion(-)
>> 
>> diff --git a/wrapper.c b/wrapper.c
>> index 3c79778055..4d448d7c57 100644
>> --- a/wrapper.c
>> +++ b/wrapper.c
>> @@ -737,7 +737,19 @@ int is_empty_or_missing_file(const char *filename)
>>  int open_nofollow(const char *path, int flags)
>>  {
>>  #ifdef O_NOFOLLOW
>> -	return open(path, flags | O_NOFOLLOW);
>> +	int ret = open(path, flags | O_NOFOLLOW);
>> +#ifdef __NetBSD__
>> +	/*
>> +	 * NetBSD sets errno to EFTYPE when path is a symlink. The only other
>> +	 * time this errno occurs when O_REGULAR is used. Since we don't use
>> +	 * it anywhere we can avoid an lstat here.
>> +	 */
>> +	if (ret < 0 && errno == EFTYPE) {
>> +		errno = ELOOP;
>> +		return -1;
>> +	}
>> +#endif
>> +	return ret;
>
> This patch seems reasonable and correct.  I don't use NetBSD, but I do
> often test there, and I'm aware of this infelicity.  I'm surprised we
> haven't hit it before.

Thanks, both.  Will queue after fixing the proposed log message a
bit (the sample must be indented, especially when it contains lines
that look like a patch).

> I suspect we'll also hit this on FreeBSD, which has a similar issue in
> that it returns `EMLINK` instead of `ELOOP`.

I won't expect Collin or you to redo this patch to cover FreeBSD;
anybody with FreeBSD box/vm can do a separate patch on a different
day.

> I do wish these two OSes
> would provide an appropriate POSIX-compatible `open` call when set with
> `_POSIX_SOURCE`, since this is one of the biggest portability problems
> with them.

That may be true, but not something we can fix here X-<.

  reply	other threads:[~2025-05-03  1:05 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-02 23:33 [PATCH] wrapper: Fix a errno discrepancy on NetBSD Collin Funk
2025-05-03  0:57 ` brian m. carlson
2025-05-03  1:05   ` Junio C Hamano [this message]
2025-05-03  4:21     ` Collin Funk
2025-05-03 17:32       ` Junio C Hamano
2025-05-03  3:48   ` Collin Funk
2025-05-03 13:31   ` Jeff King
2025-05-03 14:58     ` shejialuo
2025-05-03 15:49       ` Jeff King
2025-05-05  6:39         ` Patrick Steinhardt
2025-05-05 12:17           ` shejialuo
2025-05-03 18:56     ` Collin Funk
2025-05-05 15:43     ` Junio C Hamano
2025-05-05 18:03       ` Jeff King
2025-05-06 13:43         ` shejialuo
2025-05-06 22:58         ` Junio C Hamano
2025-05-03  4:16 ` [PATCH v2] wrapper: NetBSD gives EFTYPE and FreeBSD gives EMFILE where POSIX uses ELOOP Collin Funk
2025-05-03 15:45   ` brian m. carlson
2025-05-03 18:44     ` Collin Funk
2025-05-05  6:43   ` Patrick Steinhardt
2025-05-05 20:41     ` Junio C Hamano
2025-05-06  1:16       ` Collin Funk
2025-05-06 13:23         ` Patrick Steinhardt
2025-05-06  1:08   ` [PATCH v3] " Collin Funk
2025-05-06 13:24     ` Patrick Steinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqtt62sdv9.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=collin.funk1@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=peff@peff.net \
    --cc=sandals@crustytoothpaste.net \
    --cc=shejialuo@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.