On 08/31/11 07:06, Kevin Brott wrote:It semmed pretty clear there is a bug there.
> If we do not use fstatat then tar builds and passes almost all of the checks (only the two sparse file ones fail).
> If we use fstatat, then almost all of the checks fail - because the resulting binary is dropping zero-byte files into the archives, and doesn't function.
> So either there is a bug or enough of a fundamental difference in the way AIX 7.1's new fstatat call works, that it's not usable with the way the existing GNU tar code is trying to use it.
Unfortunately, the test program does not seem to expose the bug.
How about this test program instead? Please run it in a directory
where conftest.file has been created via "echo xxx >conftest.file".
If this test program works on AIX 7.1, can you modify it in a minor
way so that it correctly exposes the AIX bug? There must be some
way to do it, since 'tar' is doing it.
int fd = open (".", O_RDONLY);
struct stat a;
struct stat b;
if (fd < 0)
if (fstatat (fd, "conftest.file", &a,
if (lstat ("conftest.file", &b) != 0)
if (a.st_size != b.st_size) return 3;
if (a.st_dev != b.st_dev) return 4;
if (a.st_ino != b.st_ino) return 5;
if (a.st_mode != b.st_mode) return 6;
if (a.st_nlink != b.st_nlink) return 7;
if (a.st_uid != b.st_uid) return 8;
if (a.st_gid != b.st_gid) return 9;
/* Don't check time members, to avoid caching issues. */