]> git.sur5r.net Git - cc65/commitdiff
Fix errno/oserror handling.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 4 Jun 2010 10:50:58 +0000 (10:50 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 4 Jun 2010 10:50:58 +0000 (10:50 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4711 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/cbm/close.s

index 989d8953ba23966c4e7add1ce700aee50a36ab76..48a14e2ad651f44da882703243fe658aafe80057 100644 (file)
@@ -8,7 +8,6 @@
 
         .import         CLOSE
         .import         readdiskerror, closecmdchannel
-        .import         __oserror
         .importzp       tmp2
 
         .include        "errno.inc"
@@ -34,7 +33,7 @@
         tax
         lda     fdtab,x         ; Get flags for this handle
         and     #LFN_OPEN
-        beq     notopen
+        beq     invalidfd
 
 ; Valid lfn, close it. The close call is always error free, at least as far
 ; as the kernal is involved
 ; Read the drive error channel, then close it
 
         ldy     tmp2            ; Get the handle
-        ldx     unittab,y       ; Get teh disk for this handle
+        ldx     unittab,y       ; Get the disk for this handle
         jsr     readdiskerror   ; Read the disk error code
         pha                     ; Save it on stack
         ldy     tmp2
         ldx     unittab,y
         jsr     closecmdchannel ; Close the disk command channel
         pla                     ; Get the error code from the disk
-        bne     error           ; Jump if error
+        jmp     oserrcheck      ; Set _oserror and _errno, returns 0/-1
 
-; Successful
-
-        tax                     ; Return zero in a/x
-        rts
-
-; Error entry, file descriptor is invalid
+; Error entry: The given file descriptor is not valid or not open
 
 invalidfd:
-        lda     #EINVAL
-        sta     __errno
-        lda     #0
-        sta     __errno+1
-        beq     errout
-
-; Error entry, file is not open
-
-notopen:
-        lda     #3              ; File not open
-        bne     error
+        lda     #EBADF
 
-; Error entry, status not ok
+; Error entry. Sets _errno, clears _oserror, returns -1
 
-error:  sta     __oserror
-errout: lda     #$FF
+error:  jsr     __seterrno      ; Returns 0 in A
+        sta     __oserror
+        lda     #$FF
         tax                     ; Return -1
         rts