Jim Meyering <[EMAIL PROTECTED]> writes:
> + if (result == 280)
> + result = 0;
Ouch. I suppose there's no help for it; we need a runtime check to
work around that kernel bug. The bug has been reported only for Linux
kernels, right? If so, I suggest the following alternative:
#ifdef __linux__
/* Work around what might be a kernel bug:
http://bugzilla.redhat.com/442352
http://bugzilla.redhat.com/449910
It appears that utimensat can mistakenly return 280 rather
than 0 to indicate success.
FIXME: remove in 2010 or whenever the offending kernels
are no longer in common use. */
if (0 < result)
result = 0;
#endif
This won't cause any difference in behavior on working Linux kernels,
but is more likely to catch minor variants of the broken Linux
kernels. Also, it should generate faster code on all Linux kernels.
Finally, it doesn't penalize code non-Linux kernels.