X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2Fcbits%2FopenFile.c;h=66f7eab6863e083935180acddfd464f6e948d4d7;hb=89d2a24fe5be9800eb6ef0831832cba6355face5;hp=718f04efd2c29b3f1634d237337b22eb95c6f044;hpb=4ee0f622625f8e7cc76488e99762a323c46df952;p=ghc-hetmet.git diff --git a/ghc/lib/std/cbits/openFile.c b/ghc/lib/std/cbits/openFile.c index 718f04e..66f7eab 100644 --- a/ghc/lib/std/cbits/openFile.c +++ b/ghc/lib/std/cbits/openFile.c @@ -1,7 +1,7 @@ /* * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998 * - * $Id: openFile.c,v 1.14 1999/12/08 15:47:08 simonmar Exp $ + * $Id: openFile.c,v 1.18 2000/05/15 09:20:11 simonmar Exp $ * * openFile Runtime Support */ @@ -44,18 +44,24 @@ openStdFile(StgInt fd, StgInt rd) fo->buf = NULL; fo->bufWPtr = 0; fo->bufRPtr = 0; - fo->bufStart = 0; fo->flags = FILEOBJ_STD | ( rd ? FILEOBJ_READ : FILEOBJ_WRITE); fo->connectedTo = NULL; - /* MS Win32 CRT doesn't support fcntl() -- the workaround is to - start using 'completion ports', but I'm punting on implementing - support for using those. - */ #if !defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) - /* set the non-blocking flag on this file descriptor */ - fd_flags = fcntl(fd, F_GETFL); - fcntl(fd, F_SETFL, fd_flags | O_NONBLOCK); + /* Set the non-blocking flag on this file descriptor. + * + * Don't do it for stdout and stderr: some shells (actually most) + * don't reset the nonblocking flag after running a program, and + * this causes all sorts of problems. --SDM (12/99) + * + * MS Win32 CRT doesn't support fcntl() -- the workaround is to + * start using 'completion ports', but I'm punting on implementing + * support for using those. + */ + if (fd != 1 && fd != 2) { + fd_flags = fcntl(fd, F_GETFL); + fcntl(fd, F_SETFL, fd_flags | O_NONBLOCK); + } #endif return fo; @@ -274,7 +280,6 @@ openFile(StgByteArray file, StgInt how, StgInt binary) fo->fd = fd; fo->buf = NULL; - fo->bufStart = 0; fo->bufWPtr = 0; fo->bufRPtr = 0; fo->flags = flags; @@ -311,7 +316,6 @@ openFd(StgInt fd, StgInt oflags, StgInt flags) return NULL; fo->fd = fd; fo->buf = NULL; - fo->bufStart = 0; fo->bufWPtr = 0; fo->bufRPtr = 0; fo->flags = flags | ( oflags & O_RDONLY ? FILEOBJ_READ