~ chicken-core (chicken-5) 6020e97b578b0276018fe7f2bd4608d477ce2bd6


commit 6020e97b578b0276018fe7f2bd4608d477ce2bd6
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Oct 8 15:09:42 2011 +0200
Commit:     Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Sat Oct 8 15:36:38 2011 +0200

    handle EOVERFLOW and ENOTDIR gracefully in file/directory-exists?
    
    Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>

diff --git a/runtime.c b/runtime.c
index a6d7919f..f9f8459b 100644
--- a/runtime.c
+++ b/runtime.c
@@ -9246,8 +9246,12 @@ C_i_file_exists_p(C_word name, C_word file, C_word dir)
   res = stat(C_c_string(name), &buf);
 
   if(res != 0) {
-    if(errno == ENOENT) return C_SCHEME_FALSE;
-    else return C_fix(res);
+    switch(errno) {
+    case ENOENT: return C_SCHEME_FALSE;
+    case EOVERFLOW: return C_truep(dir) ? C_SCHEME_FALSE : C_SCHEME_TRUE;
+    case ENOTDIR: return C_SCHEME_FALSE;
+    default: return C_fix(res);
+    }
   }
 
   switch(buf.st_mode & S_IFMT) {
Trap