]> git.sur5r.net Git - cc65/commitdiff
Do not add the file type to the name when using append mode. It causes more
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 15 Jul 2012 12:30:43 +0000 (12:30 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 15 Jul 2012 12:30:43 +0000 (12:30 +0000)
problems than it helps.

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

libsrc/cbm/open.s

index f217068d2f4fa4ba0a150a9adeea3a5d20bf969e..dadf82d33b0cd1e5f3acc71651d4faed4d64f5bb 100644 (file)
@@ -61,9 +61,9 @@ next:   dex
                dey                     ; Parm count < 4 shouldn't be needed to be...
                dey                     ; ...checked (it generates a c compiler warning)
         dey
-       dey
-       beq     parmok          ; Branch if parameter count ok
-       jsr     addysp          ; Fix stack, throw away unused parameters
+               dey
+               beq     parmok          ; Branch if parameter count ok
+               jsr     addysp          ; Fix stack, throw away unused parameters
 
 ; Parameters ok. Pop the flags and save them into tmp3
 
@@ -74,7 +74,7 @@ parmok: jsr     popax           ; Get flags
 
         jsr     popax           ; Get name
         jsr     fnparse         ; Parse it
-        cmp     #0
+        tax
         bne     oserror         ; Bail out if problem with name
 
 ; Get a free file handle and remember it in tmp2
@@ -92,7 +92,7 @@ parmok: jsr     popax           ; Get flags
         cmp     #O_RDONLY       ; Open for reading?
         beq     doread          ; Yes: Branch
         cmp     #(O_WRONLY | O_CREAT)   ; Open for writing?
-        beq     flagsok
+        beq     dowrite
 
 ; Invalid open mode
 
@@ -119,9 +119,16 @@ closeandexit:
 
 oserror:jmp     __mappederrno
 
+; Read bit is set. Add an 'r' to the name
+
+doread: lda     #'r'
+        jsr     fnaddmode       ; Add the mode to the name
+        lda     #LFN_READ
+        bne     common          ; Branch always
+
 ; If O_TRUNC is set, scratch the file, but ignore any errors
 
-flagsok:
+dowrite:
         lda     tmp3
         and     #O_TRUNC
         beq     notrunc
@@ -131,23 +138,21 @@ flagsok:
 
 notrunc:
         lda     tmp3            ; Get the mode again
-        ldx     #'a'
         and     #O_APPEND       ; Append mode?
         bne     append          ; Branch if yes
-        ldx     #'w'
-append: txa
-        jsr     fncomplete      ; Add type and mode to the name
 
-; Setup the real open flags
+; Setup the name for create mode
 
-        lda     #LFN_WRITE
-        bne     common
+        lda     #'w'
+        jsr     fncomplete      ; Add type and mode to the name
+        jmp     appendcreate
 
-; Read bit is set. Add an 'r' to the name
+; Append bit is set. Add an 'a' to the name
 
-doread: lda     #'r'
-        jsr     fnaddmode       ; Add the mode to the name
-        lda     #LFN_READ
+append: lda     #'a'
+        jsr     fnaddmode       ; Add open mode to file name
+appendcreate:
+        lda     #LFN_WRITE
 
 ; Common read/write code. Flags in A, handle in tmp2
 
@@ -194,3 +199,4 @@ nofile:                         ; ... else use SA=0 (read)
 .endproc
 
 
+