Bruno Haible <[EMAIL PROTECTED]> writes: > The process that hangs has the command line "tail -f -n 1".
I installed the following patch to coreutils in an attempt to fix this. It uses the new isapipe module of gnulib. I think this finishes off the MacOS X problems you've reported recently. 2006-08-29 Paul Eggert <[EMAIL PROTECTED]> * bootstrap.conf (gnulib_modules): Add isapipe. * src/tail.c: Include isapipe.h. (IS_PIPE_LIKE_FILE_TYPE): Remove. (IS_TAILABLE_FILE_TYPE): Just list both FIFOs and sockets as tailable, since this seems to be portable. (main): Use isapipe, to fix a bug on MacOS X reported by Bruno Haible in <http://lists.gnu.org/archive/html/bug-coreutils/2006-08/msg00304.html>. --- bootstrap.conf 28 Aug 2006 23:05:13 -0000 1.7 +++ bootstrap.conf 29 Aug 2006 20:47:24 -0000 @@ -47,7 +47,8 @@ gnulib_modules=" getline getloadavg getndelim2 getopt getpagesize getpass-gnu gettext gettime gettimeofday getugroups getusershell gnupload group-member hard-locale hash hash-pjw host-os human idcache - inttostr inttypes lchmod lchown lib-ignore linebuffer link-follow + inttostr inttypes isapipe + lchmod lchown lib-ignore linebuffer link-follow long-options lstat malloc mbswidth md5 memcasecmp mempcpy memrchr mkancesdirs mkdir mkdir-p mkstemp mktime modechange mountlist obstack pathmax perl physmem posixtm posixver putenv --- src/tail.c 1 Jul 2006 23:50:15 -0000 1.250 +++ src/tail.c 29 Aug 2006 20:47:25 -0000 @@ -37,6 +37,7 @@ #include "error.h" #include "fcntl--.h" #include "inttostr.h" +#include "isapipe.h" #include "posixver.h" #include "quote.h" #include "safe-read.h" @@ -74,14 +75,9 @@ enum Follow_mode Follow_descriptor = 2 }; -/* On Darwin 7.7, when reading from a command-line pipe, standard - input is of type S_ISSOCK. Everywhere else it's S_ISFIFO. */ -#define IS_PIPE_LIKE_FILE_TYPE(Mode) \ - (S_ISFIFO (Mode) || S_ISSOCK (Mode)) - /* The types of files for which tail works. */ #define IS_TAILABLE_FILE_TYPE(Mode) \ - (S_ISREG (Mode) || IS_PIPE_LIKE_FILE_TYPE (Mode) || S_ISCHR (Mode)) + (S_ISREG (Mode) || S_ISFIFO (Mode) || S_ISSOCK (Mode) || S_ISCHR (Mode)) static char const *const follow_mode_string[] = { @@ -1640,14 +1636,14 @@ main (int argc, char **argv) device type, because device independence is an important principle of the system's design. - Follow the POSIX requirement only if POSIXLY_CORRECT is set. - Ideally this would ignore -f only for pipes, but S_ISFIFO - succeeds for both FIFOs and pipes and we know of no portable, - reliable way to distinguish them. */ + Follow the POSIX requirement only if POSIXLY_CORRECT is set. */ + if (forever && getenv ("POSIXLY_CORRECT")) { - struct stat stats; - if (fstat (STDIN_FILENO, &stats) == 0 && S_ISFIFO (stats.st_mode)) + int is_a_pipe = isapipe (STDIN_FILENO); + if (is_a_pipe < 0) + error (EXIT_FAILURE, errno, _("standard input")); + if (is_a_pipe) forever = false; } } _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils