/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
- * $Id: fileObject.c,v 1.5 1999/07/12 10:43:12 sof Exp $
+ * $Id: fileObject.c,v 1.11 2000/10/10 09:28:50 simonmar Exp $
*
* hPutStr Runtime Support
*/
#include "Rts.h"
#include "stgio.h"
-#include "fileObject.h"
#include <stdio.h>
#endif
void
-setBufFlags(fo, flg)
-StgForeignPtr fo;
-StgInt flg;
+setBufFlags(StgForeignPtr fo, StgInt flg)
{
((IOFileObject*)fo)->flags = flg;
return;
}
void
-setBufWPtr(fo, len)
-StgForeignPtr fo;
-StgInt len;
+setBufWPtr(StgForeignPtr fo, StgInt len)
{
((IOFileObject*)fo)->bufWPtr = len;
return;
}
StgInt
-getBufWPtr(fo)
-StgForeignPtr fo;
+getBufWPtr(StgForeignPtr fo)
{
return (((IOFileObject*)fo)->bufWPtr);
}
StgInt
-getBufSize(fo)
-StgForeignPtr fo;
+getBufSize(StgForeignPtr fo)
{
return (((IOFileObject*)fo)->bufSize);
}
void
-setBuf(fo, buf,sz)
-StgForeignPtr fo;
-StgAddr buf;
-StgInt sz;
+setBuf(StgForeignPtr fo, StgAddr buf,StgInt sz)
{
((IOFileObject*)fo)->buf = buf;
((IOFileObject*)fo)->bufSize = sz;
}
StgAddr
-getBuf(fo)
-StgForeignPtr fo;
+getBuf(StgForeignPtr fo)
{ return (((IOFileObject*)fo)->buf); }
StgAddr
-getWriteableBuf(ptr)
-StgForeignPtr ptr;
+getWriteableBuf(StgForeignPtr ptr)
{
/* getWriteableBuf() is called prior to starting to pack
a Haskell string into the IOFileObject buffer. It takes
}
StgAddr
-getBufStart(fo,count)
-StgForeignPtr fo;
-StgInt count;
+getBufStart(StgForeignPtr fo, StgInt count)
{ return ((char*)((IOFileObject*)fo)->buf + (((IOFileObject*)fo)->bufRPtr) - count); }
StgInt
-getFileFd(fo)
-StgForeignPtr fo;
+getFileFd(StgForeignPtr fo)
{ return (((IOFileObject*)fo)->fd); }
StgInt
-getConnFileFd(fo)
-StgForeignPtr fo;
+getConnFileFd(StgForeignPtr fo)
{ return (((IOFileObject*)fo)->connectedTo->fd); }
void
-setFd(fo,fp)
-StgForeignPtr fo;
-StgInt fp;
+setFd(StgForeignPtr fo,StgInt fp)
{ ((IOFileObject*)fo)->fd = fp;
return;
}
void
-setConnectedTo(fo, fw, flg)
-StgForeignPtr fo;
-StgForeignPtr fw;
-StgInt flg;
+setConnectedTo(StgForeignPtr fo, StgForeignPtr fw, StgInt flg)
{
if( flg && (! isatty(((IOFileObject*)fo)->fd) || !isatty(((IOFileObject*)fw)->fd)) ) {
return;
static int __pushback_buf_size__ = 2;
void
-setPushbackBufSize(i)
-StgInt i;
+setPushbackBufSize(StgInt i)
{ __pushback_buf_size__ = (i > 0 ? i : 0); }
StgInt
-getPushbackBufSize()
+getPushbackBufSize(void)
{ return (__pushback_buf_size__); }
-void
-clearNonBlockingIOFlag__ (ptr)
-StgForeignPtr ptr;
-{ ((IOFileObject*)ptr)->flags &= ~FILEOBJ_NONBLOCKING_IO; }
-
-void
-setNonBlockingIOFlag__ (ptr)
-StgForeignPtr ptr;
-{ ((IOFileObject*)ptr)->flags |= FILEOBJ_NONBLOCKING_IO; }
-
-void
-clearConnNonBlockingIOFlag__ (ptr)
-StgForeignPtr ptr;
-{ ((IOFileObject*)ptr)->connectedTo->flags &= ~FILEOBJ_NONBLOCKING_IO; }
-
-void
-setConnNonBlockingIOFlag__ (ptr)
-StgForeignPtr ptr;
-{
- if ( ((IOFileObject*)ptr)->connectedTo != NULL ) {
- ((IOFileObject*)ptr)->connectedTo->flags |= FILEOBJ_NONBLOCKING_IO;
- }
- return;
-}
-
-
/* Only ever called on line-buffered file objects */
StgInt
-fill_up_line_buffer(fo)
-IOFileObject* fo;
+fill_up_line_buffer(IOFileObject* fo)
{
int count,len, ipos;
unsigned char* p;
fo->bufWPtr=0;
}
ipos = fo->bufWPtr;
- len = fo->bufSize - fo->bufWPtr + 1;
+ len = fo->bufSize - fo->bufWPtr;
p = (unsigned char*)fo->buf + fo->bufWPtr;
- if ( fo->flags & FILEOBJ_NONBLOCKING_IO && inputReady ((StgForeignPtr)fo,0) != 1 )
- return FILEOBJ_BLOCKED_READ;
-
- if ((count =
+ while ((count =
(
#ifdef USE_WINSOCK
fo->flags & FILEOBJ_WINSOCK ?
}
}
fo->bufWPtr += count;
+/* TODO: ipos doesn't change???? what's it for??? --SDM */
return (fo->bufWPtr - ipos);
}