]> git.sur5r.net Git - cc65/commitdiff
Renamed oserrcheck to __mappederrno. Added an additional function named
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 10 Jun 2010 18:10:53 +0000 (18:10 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 10 Jun 2010 18:10:53 +0000 (18:10 +0000)
__directerrno and moved both to errno.s. Changed several sources to use these
functions. Needs testing.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4718 b7a2c559-68d2-44c3-8de9-860c34a00d81

13 files changed:
asminc/errno.inc
include/errno.h
libsrc/cbm/close.s
libsrc/cbm/open.s
libsrc/common/Makefile
libsrc/common/chdir.s
libsrc/common/errno.s
libsrc/common/mkdir.s
libsrc/common/oserrcheck.s [deleted file]
libsrc/common/remove.s
libsrc/common/rename.s
libsrc/common/rmdir.s
libsrc/common/uname.s

index 463e7907b0519a7c0b2a363edaed47c6f368c39b..7336719737ad5c6c0fe0e7b0327208102b1fac45 100644 (file)
@@ -1,4 +1,4 @@
-;
+;                                                   
 ; Ullrich von Bassewitz, 16.05.2000
 ;
 
@@ -7,7 +7,7 @@
         .global         __errno, __oserror
         .global         __osmaperrno
         .global         __seterrno
-        .global         oserrcheck
+        .global         __directerrno, __mappederrno
 
 ; Error codes, must match the values in the C headers
 .enum
index c0e7866237af7db989367dc142bd973eacb9b9fb..60f069dac1ec1b88a209125dd5c568f685d7c531 100644 (file)
 
 
 
-/* Operating system specific error codes */
-extern unsigned char _oserror;
+/*****************************************************************************/
+/*                                  Data                                    */
+/*****************************************************************************/
 
-/* The following functions maps an operating system specific error code (for
- * example from _oserror) into one of the E... codes below. It is user
- * callable.
- */
-int __fastcall__ _osmaperrno (unsigned char oserror);
 
-/* Set errno to a specific error code and return zero. Used by the library */
-unsigned char __fastcall__ _seterrno (unsigned char code);
 
-/* System error codes go here */
+/* Operating system specific error code */
+extern unsigned char _oserror;
+
 extern int _errno;
+/* System errors go here */
 
-/* errno must be a macro */
 #define errno   _errno
+/* errno must be a macro */
 
 
 
@@ -79,6 +76,35 @@ extern int _errno;
 
 
 
+/*****************************************************************************/
+/*                                     Code                                  */
+/*****************************************************************************/
+
+
+
+int __fastcall__ _osmaperrno (unsigned char oserror);
+/* Map an operating system specific error code (for example from _oserror) 
+ * into one of the E... codes above. It is user callable.
+ */
+
+unsigned char __fastcall__ _seterrno (unsigned char code);
+/* Set errno to a specific error code and return zero. Used by the library */
+
+int __fastcall__ _directerrno (unsigned char code);
+/* Set errno to a specific error code, clear _oserror and return -1. Used
+ * by the library.
+ */
+
+int __fastcall__ _mappederrno (unsigned char code);
+/* Set _oserror to the given platform specific error code. If it is a real
+ * error code (not zero) set errno to the corresponding system error code
+ * and return -1. Otherwise return zero.
+ * Used by the library.
+ */
+
+
+
+/* End of errno.h */
 #endif
 
 
index 48a14e2ad651f44da882703243fe658aafe80057..00dee8998a908e5383c07f32bd1fcb9c5b5cd782 100644 (file)
@@ -17,7 +17,7 @@
 
 ;--------------------------------------------------------------------------
 ; _close
-
+                                      
 .proc   _close
 
 ; Check if we have a valid handle
         ldx     unittab,y
         jsr     closecmdchannel ; Close the disk command channel
         pla                     ; Get the error code from the disk
-        jmp     oserrcheck      ; Set _oserror and _errno, returns 0/-1
+        jmp     __mappederrno   ; Set _oserror and _errno, returns 0/-1
 
 ; Error entry: The given file descriptor is not valid or not open
 
 invalidfd:
         lda     #EBADF
-
-; Error entry. Sets _errno, clears _oserror, returns -1
-
-error:  jsr     __seterrno      ; Returns 0 in A
-        sta     __oserror
-        lda     #$FF
-        tax                     ; Return -1
-        rts
+        jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
 
 .endproc
 
index 8678d358281b877410f132c1698ceebbc7d1a801..0d167a844adda158f85a5f59286a399d0c00a13d 100644 (file)
@@ -15,7 +15,6 @@
         .import         addysp, popax
         .import         scratch, fnparse, fnaddmode, fncomplete, fnset
         .import         opencmdchannel, closecmdchannel, readdiskerror
-        .import         __oserror
         .import         fnunit
         .import         _close
         .importzp       sp, tmp2, tmp3
@@ -76,12 +75,13 @@ parmok: jsr     popax           ; Get flags
         jsr     popax           ; Get name
         jsr     fnparse         ; Parse it
         cmp     #0
-        bne     error           ; Bail out if problem with name
+        bne     oserror         ; Bail out if problem with name
 
 ; Get a free file handle and remember it in tmp2
 
         jsr     freefd
-        bcs     nofile
+        lda     #EMFILE         ; Load error code
+        bcs     seterrno        ; Jump in case of errors
         stx     tmp2
 
 ; Check the flags. We cannot have both, read and write flags set, and we cannot
@@ -92,10 +92,36 @@ parmok: jsr     popax           ; Get flags
         cmp     #O_RDONLY       ; Open for reading?
         beq     doread          ; Yes: Branch
         cmp     #(O_WRONLY | O_CREAT)   ; Open for writing?
-        bne     invflags        ; No: Invalid open mode
+        beq     flagsok
+
+; Invalid open mode
+
+        lda     #EINVAL
+
+; Error entry. Sets _errno, clears _oserror, returns -1
+
+seterrno:                    
+        jmp     __directerrno
+
+; Error entry: Close the file and exit. OS error code is in A on entry
+
+closeandexit:
+        pha
+        lda     tmp2
+        clc
+        adc     #LFN_OFFS
+        jsr     CLOSE
+        ldx     fnunit
+        jsr     closecmdchannel
+        pla
+
+; Error entry: Set oserror and errno using error code in A and return -1
+
+oserror:jmp     __mappederrno
 
 ; If O_TRUNC is set, scratch the file, but ignore any errors
 
+flagsok:
         lda     tmp3
         and     #O_TRUNC
         beq     notrunc
@@ -136,7 +162,7 @@ common: sta     tmp3
         jsr     SETLFS          ; Set the file params
 
         jsr     OPEN
-        bcs     error
+        bcs     oserror
 
 ; Open the the drive command channel and read it
 
@@ -159,41 +185,9 @@ common: sta     tmp3
 
         txa                     ; Handle
         ldx     #0
+        stx     __oserror       ; Clear _oserror
         rts
 
-; Error entry: No more file handles
-
-nofile: lda     #1              ; Too many open files
-
-; Error entry. Error code is in A.
-
-error:  sta     __oserror
-errout: lda     #$FF
-        tax                     ; Return -1
-        rts
-
-; Error entry: Invalid flag parameter
-
-invflags:
-        lda     #EINVAL
-        sta     __errno
-        lda     #0
-        sta     __errno+1
-        beq     errout
-
-; Error entry: Close the file and exit
-
-closeandexit:
-        pha
-        lda     tmp2
-        clc
-        adc     #LFN_OFFS
-        jsr     CLOSE
-        ldx     fnunit
-        jsr     closecmdchannel
-        pla
-        bne     error           ; Branch always
-
 .endproc
 
 
index 54454bb806d7b66f69600630e587ac3945e0adf3..b779cf97fce18a98a069d44fd15f4e09f33c2d2d 100644 (file)
@@ -146,7 +146,6 @@ S_OBJS =    _cwd.o                  \
                mkdir.o                 \
                modfree.o               \
                modload.o               \
-                oserrcheck.o            \
                printf.o                \
                putchar.o               \
                putenv.o                \
index 0d2c6952add039f7ea4b5db695537e8809d94501..3e638cb04886c29e25989c5a951aac8d36720aa3 100644 (file)
@@ -7,7 +7,7 @@
         .export         _chdir
 
         .import         __syschdir
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -17,7 +17,7 @@
 .proc   _chdir
 
         jsr     __syschdir      ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc
 
index a07b60c0a8e6bcb8de62ae05cd91c3379dd3f328..2ab1ad86beeabec2f00c455ae7e3bd0794988945 100644 (file)
@@ -1,11 +1,45 @@
 ;
-; Ullrich von Bassewitz, 06.06.1998
+; Ullrich von Bassewitz, 2003-08-12
 ;
-; int _errno;
+; Helper functions for several high level file functions.
 ;
 
-       .export         __errno
 
+        .include        "errno.inc"
+
+.code
+
+; ----------------------------------------------------------------------------
+; int __fastcall__ _directerrno (unsigned char code);
+; /* Set errno to a specific error code, clear _oserror and return -1. Used
+;  * by the library.
+;  */
+
+__directerrno:
+        jsr     __seterrno              ; Set errno, returns with A = 0
+        sta     __oserror               ; Clear __oserror
+        beq     fail                    ; Branch always
+
+; ----------------------------------------------------------------------------
+; int __fastcall__ _mappederrno (unsigned char code);
+; /* Set _oserror to the given platform specific error code. If it is a real
+;  * error code (not zero) set errno to the corresponding system error code
+;  * and return -1. Otherwise return zero.
+;  * Used by the library.
+;  */
+
+__mappederrno:
+        sta     __oserror               ; Store the error code
+        tax                             ; Did we have an error?
+        beq     ok                      ; Branch if no
+        jsr     __osmaperrno            ; Map os error into errno code
+        jsr     __seterrno              ; Save in errno
+fail:   lda     #$FF                    ; Return -1
+        tax
+ok:     rts
+
+
+; ----------------------------------------------------------------------------
 .bss
 
 __errno:
index c65f6d19729a0979b82f67eb81154253ce2239d5..55a98f058506ccb1ae73b0398b9dfe3b090f5957 100644 (file)
@@ -7,7 +7,7 @@
         .export         _mkdir
 
         .import         __sysmkdir
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -15,6 +15,6 @@
 .proc   _mkdir
 
         jsr     __sysmkdir      ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc
diff --git a/libsrc/common/oserrcheck.s b/libsrc/common/oserrcheck.s
deleted file mode 100644 (file)
index b5887e9..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; Helper function for several high level file functions.
-;
-; The function will store the value in A into _oserror. If the value is not
-; zero, it is translated into a standard error number which is then stored
-; into errno, and -1 is returned in a/x. If the value in A was zero, errno
-; is not changed, and zero is returned in a/x.
-;
-
-        .export         oserrcheck
-
-        .include        "errno.inc"
-
-.proc   oserrcheck
-
-        sta     __oserror               ; Store the error code
-        tax                             ; Did we have an error?
-        beq     ok                      ; Branch if no
-        jsr     __osmaperrno            ; Map os error into errno code
-        jsr     __seterrno              ; Save in errno
-        lda     #$FF                    ; Return -1
-        tax
-ok:     rts
-
-.endproc
-
-
-
index 3dba1146796e9dea4214e2bedc404318e8ab110a..e66f047efde849d4bf383fe69724429ab8c54977 100644 (file)
@@ -7,7 +7,7 @@
         .export         _remove
 
         .import         __sysremove
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -15,7 +15,7 @@
 .proc   _remove
 
         jsr     __sysremove     ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc
 
index 8ef03fe8c845c6c4456de3c60cc9bbe384be4730..0fbffa4266de80baf6c5e235d6aaa51ce5f0d240 100644 (file)
@@ -7,7 +7,7 @@
         .export         _rename
 
         .import         __sysrename
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -15,7 +15,7 @@
 .proc   _rename
 
         jsr     __sysrename     ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc
 
index 100f1a3fbe59a0024fa5aff08882eae5c5cf285b..84ae9a54c5a40cb5ee6799edd21b17ba90715f07 100644 (file)
@@ -7,7 +7,7 @@
         .export         _rmdir
 
         .import         __sysrmdir
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -15,6 +15,6 @@
 .proc   _rmdir
 
         jsr     __sysrmdir      ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc
index d6fb484dd343a15e2c64aeaf40104b03d36c12a9..3c1b0840f26457700215bba9d2d54bfe87e04775 100644 (file)
@@ -7,7 +7,7 @@
         .export         _uname
 
         .import         __sysuname
-        .import         oserrcheck
+        .import         __mappederrno
 
 
 ;--------------------------------------------------------------------------
@@ -15,7 +15,7 @@
 .proc   _uname
 
         jsr     __sysuname      ; Call the machine specific function
-        jmp     oserrcheck      ; Store into _oserror, set errno, return 0/-1
+        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
 
 .endproc