]> git.sur5r.net Git - cc65/commitdiff
Rewrote fclose() in assembler
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 24 Nov 2002 19:13:38 +0000 (19:13 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 24 Nov 2002 19:13:38 +0000 (19:13 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1621 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/.cvsignore
libsrc/common/Makefile
libsrc/common/fclose.c [deleted file]
libsrc/common/fclose.s [new file with mode: 0644]

index 63075a2538ad89d5acae6723a7f69f383b50b944..36ebda219aa29e94aa561fa3ab82dff0ae8748f5 100644 (file)
@@ -6,7 +6,6 @@ abort.s
 asctime.s
 bsearch.s
 errormsg.s
-fclose.s
 fdopen.s
 fgetc.s
 fgetpos.s
index 672d05114f0625f3e97598d95f53dafb49037947..3e361bb25f2a369ba5d0ae88c35f6ade52eabe99 100644 (file)
@@ -18,7 +18,6 @@ C_OBJS =      _afailed.o      \
                 asctime.o       \
                bsearch.o       \
                errormsg.o      \
-               fclose.o        \
                fdopen.o        \
                fgetc.o         \
                fgetpos.o       \
@@ -68,6 +67,7 @@ S_OBJS =      _fdesc.o        \
                 ctime.o         \
                 divt.o          \
                errno.o         \
+               fclose.o        \
                fmisc.o         \
                fopen.o         \
                fprintf.o       \
diff --git a/libsrc/common/fclose.c b/libsrc/common/fclose.c
deleted file mode 100644 (file)
index 8eecbc6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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);
-}
-
-
-
diff --git a/libsrc/common/fclose.s b/libsrc/common/fclose.s
new file mode 100644 (file)
index 0000000..8acf491
--- /dev/null
@@ -0,0 +1,52 @@
+;
+; 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
+