> > + dd iflag=nofollow if=dd-sym.20477 count=0 > > + fail=1 > > ... > > It seems that the nofollow test doesn't work? > > What does ktrace tell you about the system calls that were executed? > I assume MacOS X has ktrace? > > cd src > ln -s dd.c sym > ktrace ./dd iflag=nofollow if=sym count=0 > kdump
Mine says: 8552 dd CALL open(0xbffffb57,0x100,0) 8552 dd NAMI "sym" 8552 dd RET open 0 and 0x100 is indeed the value of O_NOFOLLOW in <sys/fcntl.h>. So it appears that O_NOFOLLOW exists but has no effect. Shouldn't be too hard to write a configure against it. > Your email didn't mention tail/tail-tests after that $ VERBOSE=yes make check ... passed obs-plus-c1(_POSIX2_VERSION=199209:F) passed obs-plus-c1(_POSIX2_VERSION=199209:|) passed obs-plus-c1(_POSIX2_VERSION=199209:<) passed obs-plus-c2(_POSIX2_VERSION=199209:F) passed obs-plus-c2(_POSIX2_VERSION=199209:|) passed obs-plus-c2(_POSIX2_VERSION=199209:<) passed obs-c3(F) passed obs-c3(|) passed obs-c3(<) passed obs-c4(F) passed obs-c4(|) passed obs-c4(<) passed obs-c5(F) passed obs-c5(|) passed obs-c5(<) passed obs-l1(F) passed obs-l1(|) passed obs-l1(<) passed obs-l2(F) passed obs-l2(|) passed obs-l2(<) passed obs-l3(F) passed obs-l3(|) passed obs-l3(<) passed obs-plus-l4(_POSIX2_VERSION=199209:F) passed obs-plus-l4(_POSIX2_VERSION=199209:|) passed obs-plus-l4(_POSIX2_VERSION=199209:<) passed obs-plus-l5(_POSIX2_VERSION=199209:F) passed obs-plus-l5(_POSIX2_VERSION=199209:|) passed obs-plus-l5(_POSIX2_VERSION=199209:<) passed obs-1(F) passed obs-1(|) passed obs-1(<) passed obs-2(F) passed obs-2(|) passed obs-2(<) passed obs-3(F) passed obs-3(|) passed obs-3(<) passed obs-plus-4(_POSIX2_VERSION=199209:F) passed obs-plus-4(_POSIX2_VERSION=199209:|) passed obs-plus-4(_POSIX2_VERSION=199209:<) passed obs-plus-5(_POSIX2_VERSION=199209:F) passed obs-plus-5(_POSIX2_VERSION=199209:|) passed obs-plus-5(_POSIX2_VERSION=199209:<) passed obs-plus-x1(_POSIX2_VERSION=199209:F) passed obs-plus-x1(_POSIX2_VERSION=199209:|) passed obs-plus-x1(_POSIX2_VERSION=199209:<) passed obs-plus-x2(_POSIX2_VERSION=199209:F) passed obs-plus-x2(_POSIX2_VERSION=199209:|) passed obs-plus-x2(_POSIX2_VERSION=199209:<) passed obs-l(F) passed obs-l(|) passed obs-l(<) passed obs-b(F) passed obs-b(|) passed obs-b(<) passed err-1(|) passed err-1(<) passed err-2(F) passed err-2(|) passed err-2(<) passed err-3(|) passed err-3(<) passed err-4(F) passed err-4(|) passed err-4(<) passed err-5(F) passed err-5(|) passed err-5(<) passed err-6(_POSIX2_VERSION=200112:F) passed err-6(_POSIX2_VERSION=200112:|) passed err-6(_POSIX2_VERSION=200112:<) passed minus-1(_POSIX2_VERSION=199209:|) passed minus-1(_POSIX2_VERSION=199209:<) passed minus-2(_POSIX2_VERSION=199209:|) passed minus-2(_POSIX2_VERSION=199209:<) passed c-2(_POSIX2_VERSION=200112:F) passed c-2(_POSIX2_VERSION=200112:|) passed c-2(_POSIX2_VERSION=200112:<) passed c-2-minus(F) passed c-2-minus(|) passed c-2-minus(<) passed c2(F) passed c2(|) passed c2(<) passed c2-minus(F) passed c2-minus(|) passed c2-minus(<) passed n-1(F) passed n-1(|) passed n-1(<) passed n-2(F) passed n-2(|) passed n-2(<) passed n-3(F) passed n-3(|) passed n-3(<) passed n-4(F) passed n-4(|) passed n-4(<) passed n-4a(F) passed n-4a(|) passed n-4a(<) passed n-5(F) passed n-5(|) passed n-5(<) passed n-5a(F) passed n-5a(|) passed n-5a(<) passed n-5b(F) passed n-5b(|) passed n-5b(<) The process that hangs has the command line "tail -f -n 1". The debugger backtrace is: #0 0x9647f808 in clock_sleep_trap () #1 0x9647a9f8 in nanosleep () #2 0x00008dc8 in xnanosleep (seconds=0) at xnanosleep.c:101 #3 0x000046b0 in tail_forever (f=0x300930, nfiles=1, sleep_interval=1) at tail.c:1105 #4 0x0000595c in main (argc=999999999, argv=0x1) at tail.c:1689 In frame #2: (gdb) print ts_sleep $1 = { tv_sec = 1, tv_nsec = 0 } Single-stepping with "next" yields a loop in tail.c: 988 bool any_input = false; (gdb) 990 for (i = 0; i < nfiles; i++) (gdb) 998 if (f[i].ignore) (gdb) 1001 if (f[i].fd < 0) (gdb) 1008 name = pretty_name (&f[i]); (gdb) 1011 if (f[i].blocking != blocking) (gdb) 1008 name = pretty_name (&f[i]); (gdb) 1009 mode = f[i].mode; (gdb) 1011 if (f[i].blocking != blocking) (gdb) 1033 if (!f[i].blocking) (gdb) 1083 bytes_read = dump_remainder (name, fd, (gdb) 1086 any_input |= (bytes_read != 0); (gdb) 1087 f[i].size += bytes_read; (gdb) 990 for (i = 0; i < nfiles; i++) (gdb) 1090 if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files) (gdb) 1096 if ((!any_input | blocking) && fflush (stdout) != 0) (gdb) 1100 if (!any_input) (gdb) 1102 if (writer_is_dead) (gdb) 1105 if (xnanosleep (sleep_interval)) (gdb) 1110 writer_is_dead = (pid != 0 (gdb) 988 bool any_input = false; (gdb) 990 for (i = 0; i < nfiles; i++) (gdb) 998 if (f[i].ignore) (gdb) 1001 if (f[i].fd < 0) (gdb) 1008 name = pretty_name (&f[i]); (gdb) 1011 if (f[i].blocking != blocking) (gdb) 1008 name = pretty_name (&f[i]); (gdb) 1009 mode = f[i].mode; (gdb) 1011 if (f[i].blocking != blocking) (gdb) 1033 if (!f[i].blocking) (gdb) 1083 bytes_read = dump_remainder (name, fd, (gdb) 1086 any_input |= (bytes_read != 0); (gdb) 1087 f[i].size += bytes_read; (gdb) 990 for (i = 0; i < nfiles; i++) (gdb) 1090 if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files) (gdb) 1096 if ((!any_input | blocking) && fflush (stdout) != 0) (gdb) 1100 if (!any_input) (gdb) 1102 if (writer_is_dead) (gdb) 1105 if (xnanosleep (sleep_interval)) (gdb) 1110 writer_is_dead = (pid != 0 Bruno _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils