about summary refs log tree commit diff
path: root/src/tools/miri/test-cargo-miri/subcrate/main.rs
blob: 96f849e7633ac03fea4e082edc902d742522ecd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::env;
use std::path::PathBuf;

fn main() {
    println!("subcrate running");

    fn host_to_target_path(path: String) -> PathBuf {
        use std::ffi::{CStr, CString, c_char};

        let path = CString::new(path).unwrap();
        let mut out = Vec::with_capacity(1024);

        unsafe {
            extern "Rust" {
                fn miri_host_to_target_path(
                    path: *const c_char,
                    out: *mut c_char,
                    out_size: usize,
                ) -> usize;
            }
            let ret = miri_host_to_target_path(path.as_ptr(), out.as_mut_ptr(), out.capacity());
            assert_eq!(ret, 0);
            let out = CStr::from_ptr(out.as_ptr()).to_str().unwrap();
            PathBuf::from(out)
        }
    }

    // CWD should be workspace root, i.e., one level up from crate root.
    let env_dir = env::current_dir().unwrap();
    let crate_dir = host_to_target_path(env::var("CARGO_MANIFEST_DIR").unwrap());
    let crate_dir = crate_dir.parent().unwrap();
    assert_eq!(env_dir, crate_dir);
}