uapi 0.2.13

Wrappers for OS APIs on UNIX-like platform
Documentation
use testutils::*;
use uapi::*;

#[test]
fn read_link() {
    let tmp = Tempdir::new();

    let path = &*format!("{}/a", tmp);
    let path2 = &*format!("{}/b", tmp);

    let mut link = "x".to_string();
    for _ in 0..5 {
        link.push_str(&link.clone());
    }
    link.pop();

    symlink(&*link, path).unwrap();
    open(path2, c::O_CREAT | c::O_RDONLY, 0).unwrap();

    assert_eq!(&read_link_to_new_ustring(c::AT_FDCWD, path).unwrap(), &link);
    assert_eq!(
        &read_link_to_new_ustring(*open(tmp.bstr(), c::O_RDONLY, 0).unwrap(), "a")
            .unwrap(),
        &link
    );
    assert_eq!(
        read_link_to_new_ustring(c::AT_FDCWD, path2).err().unwrap(),
        Errno(c::EINVAL)
    );

    let mut s = "xyz".to_string().into();
    assert_eq!(
        read_link_to_ustring(c::AT_FDCWD, path, &mut s).unwrap(),
        link.len()
    );
    assert_eq!(
        read_link_to_ustring(c::AT_FDCWD, path2, &mut s)
            .err()
            .unwrap(),
        Errno(c::EINVAL)
    );

    assert_eq!(s, format!("xyz{}", link));
}