Am Tue, Sep 17, 2024 at 07:29:17PM -0500 schrieb Brian Cain:In the "WHATSNEW" text, there's an item from 0.9.2 that states "- make _GNU_SOURCE imply _LARGEFILE64_SOURCE". Is that intended to be the case generally? I ask because in 25e6fee2 (remove LFS64 programming interfaces (macro-only) from _GNU_SOURCE, 2022-09-27) it stated "portable software should be prepared for them not to exist" and "the intent is that this be a very short-term measure and that the macros be removed entirely in the next release cycle." This comes up because in the QEMU project, there's a linux multiarch test case that uses readdir64 and it does define _GNU_SOURCE but does not define _LARGEFILE64_SOURCE and as such the cross compiler complains that there's no declaration of readdir64 before the call site. I suppose that the test case would be more portable if it defined _LARGEFILE64_SOURCE. But I'd also be happy to send a patch to musl that could have _GNU_SOURCE imply _LARGEFILE64_SOURCE (again?) if that's desired. But - I gather that defining the macros is not what we want. Instead of macros I should add declarations for readdir64() and its LFS64 friends, but only when _LARGEFILE64_SOURCE is defined? -BrianThe LFS64 interfaces are not in POSIX, so you cannot assume they exist. Rather, you can test for their existance with a configure test, and if it fails fall back to the portable interface. Or just use the portable interface in the first place. If you want to compile portable code on glibc, then define _FILE_OFFSET_BITS to 64 and you get the exact same interface!
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