summaryrefslogtreecommitdiff
path: root/ghc/lib/std/cbits/fileObject.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/lib/std/cbits/fileObject.c')
-rw-r--r--ghc/lib/std/cbits/fileObject.c160
1 files changed, 0 insertions, 160 deletions
diff --git a/ghc/lib/std/cbits/fileObject.c b/ghc/lib/std/cbits/fileObject.c
deleted file mode 100644
index 20c0ab3f0d..0000000000
--- a/ghc/lib/std/cbits/fileObject.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
- *
- * $Id: fileObject.c,v 1.11 2000/10/10 09:28:50 simonmar Exp $
- *
- * hPutStr Runtime Support
- */
-
-#include "Rts.h"
-#include "stgio.h"
-
-#include <stdio.h>
-
-#if defined(HAVE_WINSOCK_H) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
-#define USE_WINSOCK
-#endif
-
-#ifdef USE_WINSOCK
-#include <winsock.h>
-#endif
-
-void
-setBufFlags(StgForeignPtr fo, StgInt flg)
-{
- ((IOFileObject*)fo)->flags = flg;
- return;
-}
-
-void
-setBufWPtr(StgForeignPtr fo, StgInt len)
-{
- ((IOFileObject*)fo)->bufWPtr = len;
- return;
-}
-
-StgInt
-getBufWPtr(StgForeignPtr fo)
-{
- return (((IOFileObject*)fo)->bufWPtr);
-}
-
-StgInt
-getBufSize(StgForeignPtr fo)
-{
- return (((IOFileObject*)fo)->bufSize);
-}
-
-void
-setBuf(StgForeignPtr fo, StgAddr buf,StgInt sz)
-{
- ((IOFileObject*)fo)->buf = buf;
- ((IOFileObject*)fo)->bufSize = sz;
- return;
-}
-
-StgAddr
-getBuf(StgForeignPtr fo)
-{ return (((IOFileObject*)fo)->buf); }
-
-StgAddr
-getWriteableBuf(StgForeignPtr ptr)
-{
- /* getWriteableBuf() is called prior to starting to pack
- a Haskell string into the IOFileObject buffer. It takes
- care of flushing the (input) buffer in the case we're
- dealing with a RW handle.
- */
- IOFileObject* fo = (IOFileObject*)ptr;
-
- if ( FILEOBJ_READABLE(fo) && FILEOBJ_JUST_READ(fo) ) {
- flushReadBuffer(ptr); /* ignoring return code */
- /* Ahead of time really, but indicate that we're (just about to) write */
- }
- fo->flags = (fo->flags & ~FILEOBJ_RW_READ) | FILEOBJ_RW_WRITE;
- return (fo->buf);
-}
-
-StgAddr
-getBufStart(StgForeignPtr fo, StgInt count)
-{ return ((char*)((IOFileObject*)fo)->buf + (((IOFileObject*)fo)->bufRPtr) - count); }
-
-StgInt
-getFileFd(StgForeignPtr fo)
-{ return (((IOFileObject*)fo)->fd); }
-
-StgInt
-getConnFileFd(StgForeignPtr fo)
-{ return (((IOFileObject*)fo)->connectedTo->fd); }
-
-
-void
-setFd(StgForeignPtr fo,StgInt fp)
-{ ((IOFileObject*)fo)->fd = fp;
- return;
-}
-
-void
-setConnectedTo(StgForeignPtr fo, StgForeignPtr fw, StgInt flg)
-{
- if( flg && (! isatty(((IOFileObject*)fo)->fd) || !isatty(((IOFileObject*)fw)->fd)) ) {
- return;
- }
- ((IOFileObject*)fo)->connectedTo = (IOFileObject*)fw;
- return;
-}
-
-static int __pushback_buf_size__ = 2;
-
-void
-setPushbackBufSize(StgInt i)
-{ __pushback_buf_size__ = (i > 0 ? i : 0); }
-
-StgInt
-getPushbackBufSize(void)
-{ return (__pushback_buf_size__); }
-
-/* Only ever called on line-buffered file objects */
-StgInt
-fill_up_line_buffer(IOFileObject* fo)
-{
- int count,len, ipos;
- unsigned char* p;
-
- /* ToDo: deal with buffer overflow (i.e., realloc buffer if this happens) */
-
- if ( fo->bufRPtr == fo->bufWPtr ) { /* There's nothing in the buffer, reset */
- fo->bufRPtr=0;
- fo->bufWPtr=0;
- }
- ipos = fo->bufWPtr;
- len = fo->bufSize - fo->bufWPtr;
- p = (unsigned char*)fo->buf + fo->bufWPtr;
-
- while ((count =
- (
-#ifdef USE_WINSOCK
- fo->flags & FILEOBJ_WINSOCK ?
- recv(fo->fd, p, len, 0) :
- read(fo->fd, p, len))) <= 0 ) {
-#else
- read(fo->fd, p, len))) <= 0 ) {
-#endif
- if (count == 0) {
- ghc_errtype = ERR_EOF;
- ghc_errstr = "";
- FILEOBJ_SET_EOF(fo);
- return -1;
- } else if ( count == -1 && errno == EAGAIN) {
- errno = 0;
- return FILEOBJ_BLOCKED_READ;
- } else if ( count == -1 && errno != EINTR ) {
- cvtErrno();
- stdErrno();
- return -1;
- }
- }
- fo->bufWPtr += count;
-/* TODO: ipos doesn't change???? what's it for??? --SDM */
- return (fo->bufWPtr - ipos);
-}