summaryrefslogtreecommitdiff
path: root/ghc/lib/std/cbits/freeFile.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/lib/std/cbits/freeFile.c')
-rw-r--r--ghc/lib/std/cbits/freeFile.c110
1 files changed, 0 insertions, 110 deletions
diff --git a/ghc/lib/std/cbits/freeFile.c b/ghc/lib/std/cbits/freeFile.c
deleted file mode 100644
index a35f290dd5..0000000000
--- a/ghc/lib/std/cbits/freeFile.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
- *
- * $Id: freeFile.c,v 1.11 2000/04/14 16:21:32 rrt Exp $
- *
- * Giving up files
- */
-
-#include "Rts.h"
-#include "stgio.h"
-
-#if defined(HAVE_WINSOCK_H) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
-#define USE_WINSOCK
-#endif
-
-#ifdef USE_WINSOCK
-#include <winsock.h>
-#endif
-
-
-/* sigh, the FILEs attached to the standard descriptors are
- handled differently. We don't want them freed via the
- ForeignObj finaliser, as we probably want to use these
- before we *really* shut down (dumping stats etc.)
-*/
-void
-freeStdFile(StgAddr fp)
-{ return; }
-
-void
-freeStdFileObject(StgAddr ptr)
-{
- IOFileObject* fo = (IOFileObject*)ptr;
- int rc;
-
- /* Don't close the file, just flush the buffer */
- if (fo != NULL && fo->fd != -1) {
- if (fo->buf != NULL && (fo->flags & FILEOBJ_WRITE) && fo->bufWPtr > 0) {
- /* Flush buffer contents */
- do {
- rc = writeBuffer((StgForeignPtr)fo, fo->bufWPtr);
- } while (rc == FILEOBJ_BLOCKED_WRITE) ;
- }
- }
-}
-
-void
-freeFileObject(StgAddr ptr)
-{
- /*
- * The finaliser for the file objects embedded in Handles. The RTS
- * assumes that the finaliser runs without problems, so all
- * we can do here is flush buffers + close(), and hope nothing went wrong.
- *
- */
-
- int rc;
- IOFileObject* fo = (IOFileObject*)ptr;
-
- if ( fo == NULL )
- return;
-
- if ( fo->fd == -1 || (rc = unlockFile(fo->fd)) ) {
- /* If the file handle has been explicitly closed
- * (via closeFile()), we will have given
- * up our process lock, so we break off and just return.
- */
- if ( fo->buf != NULL ) {
- free(fo->buf);
- }
- free(fo);
- return;
- }
-
- if (fo->buf != NULL && fo->bufWPtr > 0) {
- /* Flush buffer contents before closing underlying file */
- fo->flags &= ~FILEOBJ_RW_WRITE | ~FILEOBJ_RW_READ;
- flushFile(ptr);
- }
-
-#ifdef USE_WINSOCK
- if ( fo->flags & FILEOBJ_WINSOCK )
- /* Sigh - the cleanup call at the end will do this for us */
- return;
- rc = ( fo->flags & FILEOBJ_WINSOCK ? closesocket(fo->fd) : close(fo->fd) );
-#else
- rc = close(fo->fd);
-#endif
- /* Error or no error, we don't care.. */
-
- if ( fo->buf != NULL ) {
- free(fo->buf);
- }
- free(fo);
-
- return;
-}
-
-StgAddr
-ref_freeStdFileObject(void)
-{
- return (StgAddr)&freeStdFileObject;
-}
-
-StgAddr
-ref_freeFileObject(void)
-{
- return (StgAddr)&freeFileObject;
-}
-