Eric Blake wrote: > On 10/01/2010 09:11 AM, Jim Meyering wrote: >> Eric Blake wrote: >> ... >>> +# Whether birthtime is supported or not, it better not change even when >>> +# [acm]time are modified. :) >>> +touch a || fail=1 >>> +btime=$(stat --format %W a) || fail=1 >>> +atime=$(stat --format %X a) || fail=1 >>> +mtime=$(stat --format %Y a) || fail=1 >>> +ctime=$(stat --format %Z a) || fail=1 >>> + >>> +case $(stat --format %x a) in >>> + *.000000000*) sleep 2;; # worst case file system is FAT >>> + *) # FIXME: sleep .1 would be sufficient if %X showed nanoseconds >>> + sleep 1;; # should be adequate for any system with subsecond resolution >>> +esac >> >> We try hard to avoid sleeping in the common case. >> Any reason not to do what the FIXME suggests? >> >> case $(stat --format %X a) in >> *.000000000) sleep 1;; > > You need two seconds for FAT.
Yes. FAT is already handled. The case statement I suggested was intended to replace the "sleep 1" in the default case (handling the FIXME) above, not to replace the existing case statement. >> *) sleep .1;; > > Done in patch 2/2 (see my other email) - you HAVE to sleep longer than > the minimum resolution of %X... > >> esac >> >>> +touch a || fail=1 >>> +test "x$btime" = x$(stat --format %W a) || fail=1 >>> +test "x$atime" != x$(stat --format %X a) || fail=1 > > before you can guarantee that %X changed. But if %X doesn't print > subsecond details (as in patch 2/2), ... :)