git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] wrapper: Fix a errno discrepancy on NetBSD.

From
Junio C Hamano <gitster@pobox.com>
Date
May 3, 2025, 01:05 UTC
Message-ID
<xmqqtt62sdv9.fsf@gitster.g>
In-Reply-To
<aBVp51yLwxBpRskt@tapette.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
Show 47 quoted lines
> 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-<.
Previous: brian m. carlsonNext: Collin Funk
Message 3 of 25 in “wrapper: Fix a errno discrepancy on NetBSD.”
  1. wrapper: Fix a errno discrepancy on NetBSD.Collin Funk, May 2, 2025
  2. brian m. carlsonMay 3, 2025
  3. Junio C HamanoMay 3, 2025
  4. Collin FunkMay 3, 2025
  5. Junio C HamanoMay 3, 2025
  6. Collin FunkMay 3, 2025
  7. Jeff KingMay 3, 2025
  8. shejialuoMay 3, 2025
  9. Jeff KingMay 3, 2025
  10. Patrick SteinhardtMay 5, 2025
  11. shejialuoMay 5, 2025
  12. Collin FunkMay 3, 2025
  13. Junio C HamanoMay 5, 2025
  14. Jeff KingMay 5, 2025
  15. shejialuoMay 6, 2025
  16. Junio C HamanoMay 6, 2025
  17. wrapper: NetBSD gives EFTYPE and FreeBSD gives EMFILE where POSIX uses ELOOPCollin Funk, May 3, 2025
  18. brian m. carlsonMay 3, 2025
  19. Collin FunkMay 3, 2025
  20. Patrick SteinhardtMay 5, 2025
  21. Junio C HamanoMay 5, 2025
  22. Collin FunkMay 6, 2025
  23. Patrick SteinhardtMay 6, 2025
  24. wrapper: NetBSD gives EFTYPE and FreeBSD gives EMFILE where POSIX uses ELOOPCollin Funk, May 6, 2025
  25. Patrick SteinhardtMay 6, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.