From 6fcf735744c55f21e6c0422fa9402e975279c183 Mon Sep 17 00:00:00 2001 From: cuz Date: Tue, 12 Aug 2003 13:58:17 +0000 Subject: [PATCH] Fixes to the code just written git-svn-id: svn://svn.cc65.org/cc65/trunk@2276 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/_cwd.s | 4 +++- libsrc/common/getcwd.s | 22 ++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/libsrc/common/_cwd.s b/libsrc/common/_cwd.s index c393aa863..b0c48e756 100644 --- a/libsrc/common/_cwd.s +++ b/libsrc/common/_cwd.s @@ -2,7 +2,9 @@ ; Ullrich von Bassewitz, 2003-08-12 ; ; Place to store the current working directory. -; +; NOTE: Some of the code working with directories is not able to handle +; strings longer than 255 chars, so don't make __cwd_buf_size larger than 256 +; without checking the other sources. .export __cwd .export __cwd_buf_size diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index 824f4d5c0..dc1662e6d 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -37,17 +37,18 @@ loop: inc ptr2 inc ptr2+1 beq overflow -; Copy one character, end the loop if the zero terminator is reached +; Copy one character, end the loop if the zero terminator is reached. We +; don't support directories longer than 255 characters for now. @L1: lda __cwd,y sta (ptr1),y + beq done + iny bne loop -; Current working dir copied ok, A contains zero - - tax ; Return zero in a/x - rts - +; For some reason the cwd is longer than 255 characters. This should not +; happen, we handle it as if the passed buffer was too short. +; ; String overflow, return ERANGE overflow: @@ -55,8 +56,13 @@ overflow: sta __errno lda #>ERANGE sta __errno+1 - lda #$FF - tax ; Return -1 + tax ; High byte of ERANGE is zero, return zero + rts + +; Success, return buf + +done: lda ptr1 + ldx ptr1+1 rts .endproc -- 2.39.5