diff --git a/src/lib/fs.rs b/src/lib/fs.rs index de5bae0b50b5c..945a0a32c7bfa 100644 --- a/src/lib/fs.rs +++ b/src/lib/fs.rs @@ -178,6 +178,21 @@ fn remove_dir(p: path) -> bool { } } +fn change_dir(p: path) -> bool { + ret chdir(p); + + #[cfg(target_os = "win32")] + fn chdir(_p: path) -> bool { + ret str::as_buf(_p, {|buf| os::kernel32::SetCurrentDirectory(buf)}); + } + + #[cfg(target_os = "linux")] + #[cfg(target_os = "macos")] + fn chdir(_p: path) -> bool { + ret str::as_buf(_p, {|buf| os::libc::chdir(buf) == 0i32 }); + } +} + /* Function: path_is_absolute diff --git a/src/lib/linux_os.rs b/src/lib/linux_os.rs index de655b5c12ce3..a2dc0e8632a38 100644 --- a/src/lib/linux_os.rs +++ b/src/lib/linux_os.rs @@ -53,6 +53,7 @@ native mod libc { fn readlink(path: str::sbuf, buf: str::sbuf, bufsize: size_t) -> ssize_t; fn mkdir(path: str::sbuf, mode: c_int) -> c_int; fn rmdir(path: str::sbuf) -> c_int; + fn chdir(path: str::sbuf) -> c_int; } mod libc_constants { diff --git a/src/lib/macos_os.rs b/src/lib/macos_os.rs index 2bd5eab93ba5c..ad90fef489eb7 100644 --- a/src/lib/macos_os.rs +++ b/src/lib/macos_os.rs @@ -46,6 +46,7 @@ native mod libc { fn waitpid(pid: pid_t, &status: c_int, options: c_int) -> c_int; fn mkdir(s: str::sbuf, mode: c_int) -> c_int; fn rmdir(s: str::sbuf) -> c_int; + fn chdir(s: str::sbuf) -> c_int; } mod libc_constants { diff --git a/src/lib/win32_os.rs b/src/lib/win32_os.rs index 4b5635020d961..5099b7716d67a 100644 --- a/src/lib/win32_os.rs +++ b/src/lib/win32_os.rs @@ -55,6 +55,7 @@ native mod kernel32 { fn CreateDirectoryA(lpPathName: LPCTSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES) -> bool; fn RemoveDirectoryA(lpPathName: LPCTSTR) -> bool; + fn SetCurrentDirectory(lpPathName: LPCTSTR) -> bool; } // FIXME turn into constants