#include #include #include #include "haskell2c.h" /* foreign import hSetBufferingC :: Handle -> BufferMode -> IO Int */ int hSetBufferingC (FileDesc*f, NodePtr bufm) { int bm,size = BUFSIZ; int err; switch(GET_CONSTR(bufm)) { case NoBuffering: bm = _IONBF; break; case LineBuffering: bm = _IOLBF; break; case BlockBuffering: { NodePtr maybe = GET_POINTER_ARG1(bufm,1); bm = _IOFBF; IND_REMOVE(maybe); switch(GET_CONSTR(maybe)) { case Just: maybe = GET_POINTER_ARG1(maybe,1); IND_REMOVE(maybe); size = GET_INT_VALUE(maybe); } } break; } err = setvbuf(f->fp,0,bm,size); if (err) { return err; } else { f->bm = bm; f->size = size; return 0; } }