From eeb65e6e5319c24e2f777ad4e9a8a7dad1a37b5e Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 25 Apr 2007 06:03:03 +0000 Subject: [PATCH] fix redundant exists check and error-reporting problemss in directory-list svn: r6038 --- src/mzscheme/src/file.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/mzscheme/src/file.c b/src/mzscheme/src/file.c index 5fea9909d8..ae5cd70bb0 100644 --- a/src/mzscheme/src/file.c +++ b/src/mzscheme/src/file.c @@ -4620,14 +4620,6 @@ static Scheme_Object *do_directory_list(int break_ok, int argc, Scheme_Object *a } } - if (filename && !scheme_directory_exists(filename)) { - if (break_ok) - scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, - "directory-list: could not open \"%q\"", - filename); - return NULL; - } - # ifdef USE_FINDFIRST if (!filename) @@ -4671,11 +4663,14 @@ static Scheme_Object *do_directory_list(int break_ok, int argc, Scheme_Object *a hfile = FIND_FIRST(WIDE_PATH(pattern), &info); if (FIND_FAILED(hfile)) { - scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, - "directory-list: could not open \"%q\" (%E)", - filename, - GetLastError()); - return scheme_null; + if (!filename) + return scheme_null; + if (break_ok) + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, + "directory-list: could not open \"%q\" (%E)", + filename, + GetLastError()); + return NULL; } do { @@ -4711,8 +4706,16 @@ static Scheme_Object *do_directory_list(int break_ok, int argc, Scheme_Object *a # else dir = opendir(filename ? filename : "."); - if (!dir) - return scheme_null; + if (!dir) { + if (!filename) + return scheme_null; + if (break_ok) + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, + "directory-list: could not open \"%q\" (%e)", + filename, + errno); + return NULL; + } while ((e = readdir(dir))) { # ifdef DIRENT_NO_NAMLEN