#![warn(rust_2018_idioms)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
include!(concat!(env!("OUT_DIR"), "/constants.rs"));
#[cfg(test)]
mod tests {
use super::*;
use std::env;
use std::ffi::CString;
use std::fs::{remove_file, File};
use std::io::Read;
use std::mem::transmute;
use std::os::raw::c_char;
#[test]
fn set_and_read_flags() {
let mut path = env::current_dir().unwrap();
path.push("e2p-sys_testfile_Gahlu1ka");
let path_cstr = CString::new(path.to_str().unwrap()).unwrap();
let path_ptr: *const c_char = path_cstr.as_ptr();
let _f = File::create(&path).unwrap();
unsafe {
fsetflags(path_ptr, EXT2_NOATIME_FL as u64);
}
let mut readback: u64 = 0;
let readback_ptr: *mut u64 = &mut readback;
unsafe {
fgetflags(path_ptr, readback_ptr);
}
remove_file(path).unwrap();
assert_eq!(readback, EXT2_NOATIME_FL as u64)
}
#[test]
fn read_superblock() {
let mut path = env::current_dir().unwrap();
path.push("test_data");
path.push("sb.raw");
let mut buf = [0; 1024];
let mut f = File::open(path).unwrap();
f.read_exact(&mut buf).unwrap();
let sb: ext2_super_block;
unsafe {
sb = transmute::<[u8; 1024], ext2_super_block>(buf);
}
assert_eq!(sb.s_inodes_count, 256);
assert_eq!(sb.s_blocks_per_group, 8192);
assert_eq!(sb.s_magic, 0xEF53);
}
#[test]
fn read_constant() {
assert!(CONSTANTS.iter().any(|&s| s == "EXT2_IMMUTABLE_FL"));
assert!(!CONSTANTS.iter().any(|&s| s == "NO_SUCH_CONST"));
assert_eq!(EXT2_IMMUTABLE_FL, 0x10);
}
}