bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug#70411: [bug] install(1) fails to read /dev/stdin on Darwin


From: Paul Eggert
Subject: Re: bug#70411: [bug] install(1) fails to read /dev/stdin on Darwin
Date: Fri, 19 Apr 2024 00:33:52 -0700
User-agent: Mozilla Thunderbird

On 2024-04-18 14:52, Sergei Trofimovich wrote:
$ clang simple.c -o simple && echo 42 | ./simple
1: ino=3009428657538693161
2: ino=3009428657538693161
3: ino=1568241705

Note how stat() and fstat() don't agree on inode.

Apparently it's documented in
https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/fstat.2.html
as

   BUGS
      Applying fstat to a socket (and thus to a pipe) returns a zero'd buffer,
      except for the blocksize field, and a unique device and inode number.

The BUGS note simply means that a pipe has a unique inode number, which is what we want. So that's not indicating any problem.


Oh, I see the problem now. For a socket or pipe, macOS fstat returns the full 64-bit inode number, whereas macOS stat returns only the low order 32 bits. In your example, 3009428657538693161 % (2**32) == 1568241705.

This is a kernel bug in macOS. Can you report it or otherwise arrange to have the kernel bug fixed? I expect that you have better connections with Apple than I do. A proposed patch (relative to xnu-10063.101.15) is attached; I have not tested it as I don't use macOS. Thanks.

Also, I am documenting this macOS bug in Gnulib by installing the second attached patch to Gnulib, and am cc'ing this email to bug-gnulib.

Attachment: 0001-Fix-bug-with-stat-truncating-pipe-socket-st_ino.patch
Description: Text Data

Attachment: 0001-fstatat-stat-document-macOS-st_ino-pipe-bug.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]