From: Markus Wichmann <nullplan@gmx.net>
To: musl@lists.openwall.com
Cc: "Brian Cain" <quic_bcain@quicinc.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [musl] _GNU_SOURCE and _LARGEFILE_SOURCE
Date: Wed, 18 Sep 2024 16:24:11 +0200 [thread overview]
Message-ID: <Zurii1PHFV_p_Qrl@voyager> (raw)
In-Reply-To: <ed35ca19-672f-4288-b5f7-7cc46264eea0@quicinc.com>
Am Wed, Sep 18, 2024 at 12:06:44AM -0500 schrieb Brian Cain:
> Okay, this is a bit new to me, so let me see if I am following along:
>
> musl defines a readdir symbol and no readdir64 symbol, because readdir64 is
> not specified by POSIX only by Single Unix Specification? But at one time
> readdir64 (et al) mappings were provided for _GNU_SOURCE and those now
> remain but only under _LARGEFILE_SOURCE. At some future date those mappings
> might no longer be provided? And musl does not want to take patches that
> define a readdir64 symbol because that would be beyond the scope of POSIX.
> Applications that want to be portable among POSIX targets can define
> _FILE_OFFSET_BITS to 64 and this will have no effect on musl type
> definitions nor function declarations. But when using that define, glibc's
> type definitions for off_t (et al) will be such that they (1) can be used to
> represent enough values for large files among 32-bit and 64-bit targets,
> even when calling readdir-not-readdir64 and (2) are compatible / correspond
> with musl's type definitions? The wording of that last part is
> not-quite-right, but I am capturing some of the essence there? "we'll end up
> with those same semantics that musl has in the absence of _GNU_SOURCE /
> _LARGEFILE_SOURCE" maybe?
>
>
> -Brian
That is all largely correct. See, the only reason for readdir64 to exist
is because originally, ino_t was defined as the system word size, and
readdir returns inodes. So glibc added a type ino64_t, and a readdir64()
that returns pointers to struct dirent64. Now they've changed to
defining ino_t to either a system word or a 64-bit word depending on the
state of _FILE_OFFSET_BITS. And I don't know what magic they use to
redirect the calls to readdir() accordingly.
All of which is mostly pointless, since the inode as returned by
readdir() can't be used for anything by userspace. If the directory
entry is a mountpoint, then the inode number given is not even the same
as the number stat() would return.
But anyway, this means:
- there has never been a combination of Linux and libc version that had
anything other than 64-bit inodes (and file offsets) on 64-bit targets
- on 32-bit targets, musl always defines inodes and file offsets, and
glibc does the same when _FILE_OFFSET_BITS=64 is defined.
- the only reason to use the LFS64 symbols is compatibility with (at
this point) really old glibc versions on 32-bit targets.
Note that you can just use compile tests to see if you need the LFS64
symbols, and if they are available. If sizeof(ino_t) == 8, you don't
need readdir64() at all.
Ciao,
Markus
next prev parent reply other threads:[~2024-09-18 14:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-18 0:29 Brian Cain
2024-09-18 2:57 ` Markus Wichmann
2024-09-18 5:06 ` Brian Cain
2024-09-18 14:24 ` Markus Wichmann [this message]
2024-09-19 18:30 ` Markus Wichmann
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=Zurii1PHFV_p_Qrl@voyager \
--to=nullplan@gmx.net \
--cc=alex.bennee@linaro.org \
--cc=musl@lists.openwall.com \
--cc=quic_bcain@quicinc.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.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).