From 5d0ebf8b96f0ad0639a40b670c29fcbd7e29d471 Mon Sep 17 00:00:00 2001 From: cuz Date: Sun, 24 Nov 2002 19:13:38 +0000 Subject: [PATCH] Rewrote fclose() in assembler git-svn-id: svn://svn.cc65.org/cc65/trunk@1621 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/.cvsignore | 1 - libsrc/common/Makefile | 2 +- libsrc/common/fclose.c | 27 --------------------- libsrc/common/fclose.s | 52 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 29 deletions(-) delete mode 100644 libsrc/common/fclose.c create mode 100644 libsrc/common/fclose.s diff --git a/libsrc/common/.cvsignore b/libsrc/common/.cvsignore index 63075a253..36ebda219 100644 --- a/libsrc/common/.cvsignore +++ b/libsrc/common/.cvsignore @@ -6,7 +6,6 @@ abort.s asctime.s bsearch.s errormsg.s -fclose.s fdopen.s fgetc.s fgetpos.s diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 672d05114..3e361bb25 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -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 index 8eecbc605..000000000 --- a/libsrc/common/fclose.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * int fclose (FILE* f); - */ - - - -#include -#include -#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 index 000000000..8acf49166 --- /dev/null +++ b/libsrc/common/fclose.s @@ -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 + -- 2.39.5