55 lines
1.9 KiB
Rust
55 lines
1.9 KiB
Rust
|
// ignore-windows: File handling is not implemented yet
|
||
|
// compile-flags: -Zmiri-isolation-error=warn-nobacktrace
|
||
|
// normalize-stderr-test "(stat(x)?)" -> "$$STAT"
|
||
|
|
||
|
#![feature(rustc_private)]
|
||
|
|
||
|
extern crate libc;
|
||
|
|
||
|
use std::ffi::CString;
|
||
|
use std::os::unix;
|
||
|
use std::fs::{self, File};
|
||
|
use std::io::{Error, ErrorKind};
|
||
|
|
||
|
fn main() {
|
||
|
// test `open`
|
||
|
assert_eq!(File::create("foo.txt").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `fcntl`
|
||
|
unsafe {
|
||
|
assert_eq!(libc::fcntl(1, libc::F_DUPFD, 0), -1);
|
||
|
assert_eq!(Error::last_os_error().raw_os_error(), Some(libc::EPERM));
|
||
|
}
|
||
|
|
||
|
// test `unlink`
|
||
|
assert_eq!(fs::remove_file("foo.txt").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `symlink`
|
||
|
assert_eq!(unix::fs::symlink("foo.txt", "foo_link.txt").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `readlink`
|
||
|
let symlink_c_str = CString::new("foo.txt").unwrap();
|
||
|
let mut buf = vec![0; "foo_link.txt".len() + 1];
|
||
|
unsafe {
|
||
|
assert_eq!(libc::readlink(symlink_c_str.as_ptr(), buf.as_mut_ptr(), buf.len()), -1);
|
||
|
assert_eq!(Error::last_os_error().raw_os_error(), Some(libc::EACCES));
|
||
|
}
|
||
|
|
||
|
// test `stat`
|
||
|
assert_eq!(fs::metadata("foo.txt").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
assert_eq!(Error::last_os_error().raw_os_error(), Some(libc::EACCES));
|
||
|
|
||
|
// test `rename`
|
||
|
assert_eq!(fs::rename("a.txt", "b.txt").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `mkdir`
|
||
|
assert_eq!(fs::create_dir("foo/bar").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `rmdir`
|
||
|
assert_eq!(fs::remove_dir("foo/bar").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
|
||
|
// test `opendir`
|
||
|
assert_eq!(fs::read_dir("foo/bar").unwrap_err().kind(), ErrorKind::PermissionDenied);
|
||
|
assert_eq!(Error::last_os_error().raw_os_error(), Some(libc::EACCES));
|
||
|
}
|