uapi 0.2.13

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

#[test]
fn seal() {
    let fd = memfd_create("", c::MFD_ALLOW_SEALING).unwrap();

    assert_eq!(fcntl_get_seals(*fd).unwrap(), 0);

    fcntl_add_seals(*fd, c::F_SEAL_SEAL).unwrap();

    assert_eq!(fcntl_get_seals(*fd).unwrap(), c::F_SEAL_SEAL);
}

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

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

    let fd = open(path, c::O_CREAT | c::O_RDWR, 0o777).unwrap();

    ftruncate(*fd, 1000).unwrap();

    let mut lk: c::flock = pod_zeroed();
    lk.l_type = c::F_WRLCK as _;
    lk.l_whence = c::SEEK_SET as _;
    lk.l_start = 3 as _;
    lk.l_len = 3 as _;

    fcntl_ofd_setlk(*fd, &lk).unwrap();

    let mut lk2: c::flock = pod_zeroed();
    lk2.l_type = c::F_RDLCK as _;
    lk2.l_whence = c::SEEK_SET as _;
    lk2.l_start = 4 as _;
    lk2.l_len = 1 as _;

    fcntl_ofd_getlk(*open(path, c::O_RDWR, 0).unwrap(), &mut lk2).unwrap();

    assert_eq!(lk2.l_type, lk.l_type);
    assert_eq!(lk2.l_whence, lk.l_whence);
    assert_eq!(lk2.l_start, lk.l_start);
    assert_eq!(lk2.l_len, lk.l_len);
    assert_eq!(lk2.l_pid, -1);
}