]> git.sur5r.net Git - cc65/commitdiff
lseek: Return EINVAL if new position is less than 0 or greater than 2^24 - 1.
authorPatrick Pelletier <code@funwithsoftware.org>
Mon, 20 Aug 2018 15:45:40 +0000 (08:45 -0700)
committerOliver Schmidt <ol.sc@web.de>
Mon, 20 Aug 2018 20:24:48 +0000 (22:24 +0200)
Also, implemented @greg-king5's suggestion to save a byte on error paths.

libsrc/apple2/lseek.s

index d1633c32cc833a7b03c7afe4b594c8847e9e7af2..b6c31515eadbe57ac31d7e581ce74f8b26293e8f 100644 (file)
@@ -22,6 +22,7 @@ _lseek:
         jsr     popptr1
         jsr     popax
         sta     ptr2
+        stx     ptr2+1
 
         ; Get and process fd
         jsr     popax
@@ -78,6 +79,9 @@ seek_common:
         tya
         adc     ptr2
         sta     mliparam + MLI::MARK::POSITION+2
+        lda     #$00
+        adc     ptr2+1
+        bne     einval          ; less than 0 or greater than 2^24 - 1
 
         ; Set file pointer
         lda     #SET_MARK_CALL
@@ -103,13 +107,13 @@ seek_common:
 einval: lda     #EINVAL
 
         ; Set __errno
-errno:  ldx     #$FF
-        stx     sreg
+errno:  jsr     __directerrno   ; leaves -1 in AX
+        stx     sreg            ; extend return value to 32 bits
         stx     sreg+1
-        jmp     __directerrno
+        rts
 
         ; Set __oserror
-oserr:  ldx     #$FF
-        stx     sreg
+oserr:  jsr     __mappederrno   ; leaves -1 in AX
+        stx     sreg            ; extend return value to 32 bits
         stx     sreg+1
-        jmp     __mappederrno
+        rts