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.


Reply via email to