There is a stupid, stupid bug in FreeBSD 7 (up to and including the
7.3 release):  The fdopendir() function is present in libc, but the
prototype is missing from <dirent.h>.

GNU tar's configure picks up fdopendir(), but since there is no
prototype, it ends up typed as

  int fdopendir();

This is bad.  fdopendir() returns a pointer, which is truncated
from 64 to 32 bits on LP64 platforms.  Running GNU tar's "make
check" leaves a trail of coredumps behind...

The macro complex around m4/dirent*.m4 and m4/fdopendir.m4 needs
some sort of check if fdopendir() is declared, and if not, must
provide a prototype.  These macros are probably used in other GNU
projects as well, and bug-tar may not be the right address, but I'm
throwing it out there in the hope that it will reach somebody who
knows how to deal with this properly.

-- 
Christian "naddy" Weisgerber                          [email protected]


Reply via email to