Bug 15838

Summary: fts.h interfaces are presently non-usable except on 64-bit systems
Product: glibc Reporter: Rich Felker <bugdal>
Component: libcAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED DUPLICATE    
Severity: normal CC: drepper.fsp, fweimer, gabravier, rjones
Priority: P2 Flags: fweimer: security-
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Rich Felker 2013-08-14 19:32:00 UTC
fts.h contains the following:

/* The fts interface is incompatible with the LFS interface which
   transparently uses the 64-bit file access functions.  */
#ifdef __USE_FILE_OFFSET64
# error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
#endif

Thus, the whole fts.h API is useless except on 64-bit machines. Assuming a 32-bit system, if 64-bit off_t is used, fts.h explicitly generates an error. If 32-bit off_t is used, fts will fail at runtime because stat fails with EOVERFLOW when the inode number or file size does not fit in 32 bits, making any program using the fts interfaces unreliable.

I would prefer just deprecating this whole API, removing the header and using symbol versioning to prevent new apps from linking to it. There is a perfectly good version, without the 32-bit limitations, in gnulib which apps can use if they need it, and there are various BSD versions that also work fine. The breakage in the glibc version is purely from keeping ABI compatibility with the old 32-bit off_t interfaces.

Alternatively, FTS64, fts_open64, etc. could be added...
Comment 1 Joseph Myers 2015-08-24 09:45:54 UTC
Duplicate.

*** This bug has been marked as a duplicate of bug 11460 ***