about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJonathan Sternberg <jonathansternberg@gmail.com>2012-04-01 11:39:17 -0400
committerJonathan Sternberg <jonathansternberg@gmail.com>2012-04-01 11:39:17 -0400
commit3a0477c39816c20fc798a33cde56e8b99ddb32b1 (patch)
tree7c3ac277a6f2dd81e5d5297808e3e9bcd8d6265d
parent0904f255075d3c20f16d4ca2d1db14cac3fbb2de (diff)
downloadrust-3a0477c39816c20fc798a33cde56e8b99ddb32b1.tar.gz
rust-3a0477c39816c20fc798a33cde56e8b99ddb32b1.zip
Fixing issue 1919. list_dir is the more general version that returns a vector with the contents of the directory. list_dir_path contains the old behavior (as a convenience function).
-rw-r--r--src/cargo/cargo.rs6
-rw-r--r--src/compiletest/compiletest.rs2
-rw-r--r--src/fuzzer/fuzzer.rs2
-rw-r--r--src/libcore/os.rs39
-rw-r--r--src/rustc/util/filesearch.rs2
5 files changed, 31 insertions, 20 deletions
diff --git a/src/cargo/cargo.rs b/src/cargo/cargo.rs
index 51edc90589a..9cad4bb3f94 100644
--- a/src/cargo/cargo.rs
+++ b/src/cargo/cargo.rs
@@ -434,7 +434,7 @@ fn for_each_package(c: cargo, b: fn(source, package)) {
 
 // Runs all programs in directory <buildpath>
 fn run_programs(buildpath: str) {
-    let newv = os::list_dir(buildpath);
+    let newv = os::list_dir_path(buildpath);
     for ct: str in newv {
         run::run_program(ct, []);
     }
@@ -471,7 +471,7 @@ fn install_one_crate(c: cargo, path: str, cf: str) {
       none { ret; }
       some(bp) { bp }
     };
-    let newv = os::list_dir(buildpath);
+    let newv = os::list_dir_path(buildpath);
     let exec_suffix = os::exe_suffix();
     for ct: str in newv {
         if (exec_suffix != "" && str::ends_with(ct, exec_suffix)) ||
@@ -524,7 +524,7 @@ fn rustc_sysroot() -> str {
 fn install_source(c: cargo, path: str) {
     #debug("source: %s", path);
     os::change_dir(path);
-    let contents = os::list_dir(".");
+    let contents = os::list_dir_path(".");
 
     #debug("contents: %s", str::connect(contents, ", "));
 
diff --git a/src/compiletest/compiletest.rs b/src/compiletest/compiletest.rs
index ed159d6a073..0ea7fecda75 100644
--- a/src/compiletest/compiletest.rs
+++ b/src/compiletest/compiletest.rs
@@ -127,7 +127,7 @@ fn test_opts(config: config) -> test::test_opts {
 fn make_tests(config: config) -> [test::test_desc] {
     #debug("making tests from %s", config.src_base);
     let mut tests = [];
-    for file: str in os::list_dir(config.src_base) {
+    for file: str in os::list_dir_path(config.src_base) {
         let file = file;
         #debug("inspecting file %s", file);
         if is_test(config, file) {
diff --git a/src/fuzzer/fuzzer.rs b/src/fuzzer/fuzzer.rs
index 70fe1afa876..87dece998b0 100644
--- a/src/fuzzer/fuzzer.rs
+++ b/src/fuzzer/fuzzer.rs
@@ -25,7 +25,7 @@ fn find_rust_files(&files: [str], path: str) {
     } else if os::path_is_dir(path)
         && !contains(path, "compile-fail")
         && !contains(path, "build") {
-        for p in os::list_dir(path) {
+        for p in os::list_dir_path(path) {
             find_rust_files(files, p);
         }
     }
diff --git a/src/libcore/os.rs b/src/libcore/os.rs
index 8d9cd47fdf8..d7e4af2a15a 100644
--- a/src/libcore/os.rs
+++ b/src/libcore/os.rs
@@ -29,8 +29,8 @@ export close, fclose, fsync_fd, waitpid;
 export env, getenv, setenv, fdopen, pipe;
 export getcwd, dll_filename, self_exe_path;
 export exe_suffix, dll_suffix, sysname;
-export homedir, list_dir, path_is_dir, path_exists, make_absolute,
-       make_dir, remove_dir, change_dir, remove_file;
+export homedir, list_dir, list_dir_path, path_is_dir, path_exists,
+       make_absolute, make_dir, remove_dir, change_dir, remove_file;
 
 // FIXME: move these to str perhaps?
 export as_c_charp, fill_charp_buf;
@@ -452,26 +452,37 @@ fn list_dir(p: path) -> [str] {
     #[cfg(target_os = "linux")]
     #[cfg(target_os = "macos")]
     #[cfg(target_os = "freebsd")]
-    fn star() -> str { "" }
+    fn star(p: str) -> str { p }
 
     #[cfg(target_os = "win32")]
-    fn star() -> str { "*" }
+    fn star(p: str) -> str {
+        let pl = str::len(p);
+        if pl == 0u || (p[pl - 1u] as char != path::consts::path_sep
+                        ** p[pl - 1u] as char != path::consts::alt_path_sep) {
+            p + path::path_sep() + "*"
+        } else {
+            p + "*"
+        }
+    }
 
+    rustrt::rust_list_files(star(p)).filter {|filename|
+        !str::eq(filename, ".") || !str::eq(filename, "..")
+    }
+}
+
+#[doc = "
+Lists the contents of a directory
+
+This version prepends each entry with the directory.
+"]
+fn list_dir_path(p: path) -> [str] {
     let mut p = p;
     let pl = str::len(p);
     if pl == 0u || (p[pl - 1u] as char != path::consts::path_sep
                     && p[pl - 1u] as char != path::consts::alt_path_sep) {
         p += path::path_sep();
     }
-    let mut full_paths: [str] = [];
-    for vec::each(rustrt::rust_list_files(p + star())) {|filename|
-        if !str::eq(filename, ".") {
-            if !str::eq(filename, "..") {
-                full_paths += [p + filename];
-            }
-        }
-    }
-    ret full_paths;
+    os::list_dir(p).map {|f| p + f}
 }
 
 #[doc = "Removes a directory at the specified path"]
@@ -750,4 +761,4 @@ mod tests {
         assert (!os::path_exists("test/nonexistent-bogus-path"));
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/rustc/util/filesearch.rs b/src/rustc/util/filesearch.rs
index ac535f39bef..75327597ce9 100644
--- a/src/rustc/util/filesearch.rs
+++ b/src/rustc/util/filesearch.rs
@@ -69,7 +69,7 @@ fn mk_filesearch(maybe_sysroot: option<path>,
 fn search<T: copy>(filesearch: filesearch, pick: pick<T>) -> option<T> {
     for lib_search_path in filesearch.lib_search_paths() {
         #debug("searching %s", lib_search_path);
-        for path in os::list_dir(lib_search_path) {
+        for path in os::list_dir_path(lib_search_path) {
             #debug("testing %s", path);
             let maybe_picked = pick(path);
             if option::is_some(maybe_picked) {