asctime.s
bsearch.s
errormsg.s
-fclose.s
fdopen.s
fgetc.s
fgetpos.s
asctime.o \
bsearch.o \
errormsg.o \
- fclose.o \
fdopen.o \
fgetc.o \
fgetpos.o \
ctime.o \
divt.o \
errno.o \
+ fclose.o \
fmisc.o \
fopen.o \
fprintf.o \
+++ /dev/null
-/*
- * int fclose (FILE* f);
- */
-
-
-
-#include <fcntl.h>
-#include <errno.h>
-#include "_file.h"
-
-
-
-int fclose (FILE* f)
-{
- if ((f->f_flags & _FOPEN) == 0) {
- /* File is not open */
- _errno = EINVAL; /* File not input */
- return EOF;
- }
-
- /* Reset the flags and close the file */
- f->f_flags = _FCLOSED;
- return close (f->f_fd);
-}
-
-
-
--- /dev/null
+;
+; Ullrich von Bassewitz, 22.11.2002
+;
+; int __fastcall__ fclose (FILE* f);
+; /* Close a file */
+;
+
+ .export _fclose
+
+ .import _close
+ .importzp ptr1
+
+ .include "errno.inc"
+ .include "_file.inc"
+
+; ------------------------------------------------------------------------
+; Code
+
+.proc _fclose
+
+ sta ptr1
+ stx ptr1+1 ; Store f
+
+; Check if the file is really open
+
+ ldy #_FILE_f_flags
+ lda (ptr1),y
+ and #_FOPEN
+ bne @L1
+
+; File is not open
+
+ lda #EINVAL
+ sta __errno
+ ldx #0
+ stx __errno+1
+ dex
+ txa
+ rts
+
+; File is open. Reset the flags and close the file.
+
+@L1: lda #_FCLOSED
+ sta (ptr1),y
+
+ ldy #_FILE_f_fd
+ lda (ptr1),y
+ ldx #0
+ jmp _close ; Will set errno and return an error flag
+
+.endproc
+