diff --git a/ghc/lib/std/cbits/setBinaryMode.c b/ghc/lib/std/cbits/setBinaryMode.c new file mode 100644 index 0000000000000000000000000000000000000000..641e999a551f791f00649401f20113c4080784f5 --- /dev/null +++ b/ghc/lib/std/cbits/setBinaryMode.c @@ -0,0 +1,38 @@ +/* + * (c) The GRASP/AQUA Project, Glasgow University, 1999 + * + * $Id: setBinaryMode.c,v 1.1 1999/09/19 19:27:10 sof Exp $ + * + * hSetBinaryMode runtime support + */ + +#include "Rts.h" +#include "stgio.h" + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif + +#ifdef _WIN32 +#include <io.h> +#endif + +StgInt +setBinaryMode__(ptr,flg) +StgForeignPtr ptr; +StgInt flg; +{ + IOFileObject* fo = (IOFileObject*)ptr; + int rc; + + rc = flushBuffer(ptr); + if (rc < 0) return rc; + +#ifdef _WIN32 + setmode ( fo->fd, flg ? O_BINARY : O_TEXT ); +#endif + rc = (fo->flags & FILEOBJ_BINARY ? 1 : 0); + fo->flags = fo->flags & (flg ? FILEOBJ_BINARY : ~FILEOBJ_BINARY); + + return rc; +}