Configuration Information [Automatically generated, do not change]: Machine: i586 OS: linux-gnu Compiler: gcc -I/usr/src/packages/BUILD/bash-4.2 -L/usr/src/packages/BUILD/bash-4.2/../readline-6.2 Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i586' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i586-suse-linux-gnu' -DCONF_VENDOR='suse' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -march=i586 -mtune=i686 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DRECYCLES_PIDS -Wall -g -std=gnu89 -Wextra -Wno-unprototyped-calls -Wno-switch-enum -Wno-unused-variable -Wno-unused-parameter -ftree-loop-linear -pipe -fprofile-use uname output: Linux boole 2.6.27.48-0.2-pae #5 SMP Fri Sep 24 16:09:41 CEST 2010 i686 i686 i386 GNU/Linux Machine Type: i586-suse-linux-gnu
Bash Version: 4.2 Patch Level: 20 Release Status: release Description: As in subject the test builtin does not use the nanosecond timestamps of the stat structure specified in POSIX.1-2008. The patch included shouls add the comparision of the nanosecond timestamps. Repeat-By: touch /tmp/foo1 ; usleep 1 ; touch /tmp/foo2 test /tmp/foo2 -nt /tmp/foo1 || echo Oops Fix: --- test.c +++ test.c 2012-03-06 11:14:00.149934027 +0000 @@ -309,8 +309,17 @@ filecomp (s, t, op) switch (op) { +#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || (defined(_XOPEN_SOURCE) && ((_XOPEN_SOURCE - 0) >= 700)) || (defined(_POSIX_C_SOURCE) && ((_POSIX_C_SOURCE - 0) >= 200809L)) +# define st_mtimcmp(t1, t2, CMP) \ + (((t1).st_mtim.tv_sec == (t2).st_mtim.tv_sec) ? \ + ((t1).st_mtim.tv_nsec CMP (t2).st_mtim.tv_nsec) : \ + ((t1).st_mtim.tv_sec CMP (t2).st_mtim.tv_sec)) + case OT: return (r1 < r2 || (r2 == 0 && st_mtimcmp(st1, st2, <))); + case NT: return (r1 > r2 || (r1 == 0 && st_mtimcmp(st1, st2, >))); +#else case OT: return (r1 < r2 || (r2 == 0 && st1.st_mtime < st2.st_mtime)); case NT: return (r1 > r2 || (r1 == 0 && st1.st_mtime > st2.st_mtime)); +#endif case EF: return (same_file (s, t, &st1, &st2)); } return (FALSE);