On Fri, 19 Apr 2024 00:33:52 -0700 Paul Eggert <egg...@cs.ucla.edu> wrote:
> 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. I reported it via https://www.apple.com/feedback/macos.html > 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. Thank you, Paul! -- Sergei