Permalink
Browse files

Merge pull request #2099 from jsternberg/master

os::list_dir to return only the contents of the directory
  • Loading branch information...
2 parents 9d5c20e + 3a0477c commit 252086c89a90c3be169fa27bbdbfcd244cb4d57d @brson brson committed Apr 1, 2012
Showing with 31 additions and 20 deletions.
  1. +3 −3 src/cargo/cargo.rs
  2. +1 −1 src/compiletest/compiletest.rs
  3. +1 −1 src/fuzzer/fuzzer.rs
  4. +25 −14 src/libcore/os.rs
  5. +1 −1 src/rustc/util/filesearch.rs
View
@@ -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, ", "));
@@ -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) {
View
@@ -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);
}
}
View
@@ -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"));
}
-}
+}
@@ -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) {

0 comments on commit 252086c

Please sign in to comment.