diff --git a/src/lib/fs.rs b/src/lib/fs.rs index 0e9dc591756b..922d01e841be 100644 --- a/src/lib/fs.rs +++ b/src/lib/fs.rs @@ -4,7 +4,7 @@ import os_fs; import str; native "rust" mod rustrt { - fn rust_file_is_dir(path: str) -> int; + fn rust_file_is_dir(path: istr::sbuf) -> int; } fn path_sep() -> istr { ret istr::from_char(os_fs::path_sep); } @@ -43,7 +43,9 @@ fn connect(pre: &path, post: &path) -> path { } fn file_is_dir(p: &path) -> bool { - ret rustrt::rust_file_is_dir(istr::to_estr(p)) != 0; + ret istr::as_buf(p, { |buf| + rustrt::rust_file_is_dir(buf) != 0 + }); } fn list_dir(p: &path) -> [istr] { diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 3e89d12e4382..34624f1a8171 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -444,9 +444,9 @@ rust_dirent_filename(rust_task *task, dirent* ent) { #endif extern "C" CDECL int -rust_file_is_dir(rust_task *task, rust_str *path) { +rust_file_is_dir(rust_task *task, char *path) { struct stat buf; - if (stat((char*)path->data, &buf)) { + if (stat(path, &buf)) { return 0; } return S_ISDIR(buf.st_mode);