123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- extern crate libc;
- use core::ffi::{c_char, c_void};
- use libc::{mount, umount};
- use nix::errno::Errno;
- use std::fs;
- use std::os::unix::fs::symlink;
- use std::path::Path;
- fn main() {
- mount_test_ramfs();
- let target = "/mnt/myramfs/target_file.txt";
- let symlink_path = "/mnt/myramfs/another/symlink_file.txt";
- let dir = "/mnt/myramfs/another";
- fs::write(target, "This is the content of the target file.")
- .expect("Failed to create target file");
- fs::create_dir(dir).expect("Failed to create target dir");
- assert!(Path::new(target).exists(), "Target file was not created");
- assert!(Path::new(dir).exists(), "Target dir was not created");
- symlink(target, symlink_path).expect("Failed to create symlink");
- assert!(Path::new(symlink_path).exists(), "Symlink was not created");
- let symlink_content = fs::read_link(symlink_path).expect("Failed to read symlink");
- assert_eq!(
- symlink_content.display().to_string(),
- target,
- "Symlink points to the wrong target"
- );
- fs::remove_file(symlink_path).expect("Failed to remove symlink");
- fs::remove_file(target).expect("Failed to remove target file");
- fs::remove_dir(dir).expect("Failed to remove test_dir");
- assert!(!Path::new(symlink_path).exists(), "Symlink was not deleted");
- assert!(!Path::new(target).exists(), "Target file was not deleted");
- assert!(!Path::new(dir).exists(), "Directory was not deleted");
- umount_test_ramfs();
- println!("All tests passed!");
- }
- fn mount_test_ramfs() {
- let path = Path::new("mnt/myramfs");
- let dir = fs::create_dir_all(path);
- assert!(dir.is_ok(), "mkdir /mnt/myramfs failed");
- let source = b"\0".as_ptr() as *const c_char;
- let target = b"/mnt/myramfs\0".as_ptr() as *const c_char;
- let fstype = b"ramfs\0".as_ptr() as *const c_char;
- // let flags = MS_BIND;
- let flags = 0;
- let data = std::ptr::null() as *const c_void;
- let result = unsafe { mount(source, target, fstype, flags, data) };
- assert_eq!(
- result,
- 0,
- "Mount myramfs failed, errno: {}",
- Errno::last().desc()
- );
- println!("Mount myramfs success!");
- }
- fn umount_test_ramfs() {
- let path = b"/mnt/myramfs\0".as_ptr() as *const c_char;
- let result = unsafe { umount(path) };
- if result != 0 {
- let err = Errno::last();
- println!("Errno: {}", err);
- println!("Infomation: {}", err.desc());
- }
- assert_eq!(result, 0, "Umount myramfs failed");
- }
|