--- /dev/null
+%
+% (c) The GRASP/AQUA Project, Glasgow University, 1997
+%
+\subsection[freeFile.lc]{Giving up files}
+
+\begin{code}
+
+#include "rtsdefs.h"
+#include "stgio.h"
+
+/* sigh, the standard channels are handled differently,
+ we don't want them freed via the ForeignObj finaliser,
+ as we probably want to use these channels before we
+ *really* shutdown (dumping stats etc.)
+*/
+void freeStdChannel(fp)
+StgForeignObj fp;
+{ return; }
+
+void freeFile(fp)
+StgForeignObj fp;
+{
+ int rc;
+
+ if ( fp == NULL || (rc = unlockFile(fileno((FILE *)fp))) ) {
+ /* If the file handle has been explicitly closed
+ * (via closeFile()) or freed, we will have given
+ * up our process lock, so we silently return here.
+ */
+ return;
+ }
+
+ /*
+ * The finaliser for the FILEs embedded in Handles. The RTS
+ * assumes that the finaliser runs without problems, so all
+ * we can do here is fclose(), and hope nothing went wrong.
+ *
+ * Assume fclose() flushes output stream.
+ */
+
+ rc = fclose((FILE *)fp);
+ /* Error or no error, we don't care.. */
+
+ /*
+ if ( rc == EOF ) {
+ fprintf(stderr. "Warning: file close ran into trouble\n");
+ }
+ */
+
+ return;
+}
+\end{code}