Treat FIFOs' type as __WASI_FILETYPE_UNKNOWN.

This commit is contained in:
Marcin Mielniczuk
2019-08-27 15:36:21 +02:00
committed by Dan Gohman
parent c2d2b8066b
commit 85a41d449c
3 changed files with 5 additions and 35 deletions

View File

@@ -51,10 +51,7 @@ pub(crate) fn determine_type_rights<Fd: AsRawFd>(
// we just make a `File` here for convenience; we don't want it to close when it drops
let file =
std::mem::ManuallyDrop::new(unsafe { std::fs::File::from_raw_fd(fd.as_raw_fd()) });
let ft = file
.metadata()
.map_err(errno_from_ioerror)?
.file_type();
let ft = file.metadata().map_err(errno_from_ioerror)?.file_type();
if ft.is_block_device() {
(
host::__WASI_FILETYPE_BLOCK_DEVICE,
@@ -110,9 +107,9 @@ pub(crate) fn determine_type_rights<Fd: AsRawFd>(
}
} else if ft.is_fifo() {
(
host::__WASI_FILETYPE_SOCKET_STREAM,
host::RIGHTS_SOCKET_BASE,
host::RIGHTS_SOCKET_INHERITING,
host::__WASI_FILETYPE_UNKNOWN,
host::RIGHTS_REGULAR_FILE_BASE,
host::RIGHTS_REGULAR_FILE_INHERITING,
)
} else {
return Err(host::__WASI_EINVAL);

View File

@@ -158,7 +158,7 @@ pub(crate) fn filetype_from_nix(sflags: nix::sys::stat::SFlag) -> host::__wasi_f
host::__WASI_FILETYPE_CHARACTER_DEVICE
} else if sflags.contains(SFlag::S_IFBLK) {
host::__WASI_FILETYPE_BLOCK_DEVICE
} else if sflags.contains(SFlag::S_IFIFO) | sflags.contains(SFlag::S_IFSOCK) {
} else if sflags.contains(SFlag::S_IFSOCK) {
host::__WASI_FILETYPE_SOCKET_STREAM
} else if sflags.contains(SFlag::S_IFDIR) {
host::__WASI_FILETYPE_DIRECTORY
@@ -171,31 +171,6 @@ pub(crate) fn filetype_from_nix(sflags: nix::sys::stat::SFlag) -> host::__wasi_f
}
}
pub(crate) fn nix_from_filetype(sflags: host::__wasi_filetype_t) -> nix::sys::stat::SFlag {
use nix::sys::stat::SFlag;
let mut nix_sflags = SFlag::empty();
if sflags & host::__WASI_FILETYPE_CHARACTER_DEVICE != 0 {
nix_sflags.insert(SFlag::S_IFCHR);
}
if sflags & host::__WASI_FILETYPE_BLOCK_DEVICE != 0 {
nix_sflags.insert(SFlag::S_IFBLK);
}
if sflags & host::__WASI_FILETYPE_SOCKET_STREAM != 0 {
nix_sflags.insert(SFlag::S_IFIFO);
nix_sflags.insert(SFlag::S_IFSOCK);
}
if sflags & host::__WASI_FILETYPE_DIRECTORY != 0 {
nix_sflags.insert(SFlag::S_IFDIR);
}
if sflags & host::__WASI_FILETYPE_REGULAR_FILE != 0 {
nix_sflags.insert(SFlag::S_IFREG);
}
if sflags & host::__WASI_FILETYPE_SYMBOLIC_LINK != 0 {
nix_sflags.insert(SFlag::S_IFLNK);
}
nix_sflags
}
pub(crate) fn filestat_from_nix(
filestat: nix::sys::stat::FileStat,
) -> Result<host::__wasi_filestat_t> {

View File

@@ -368,8 +368,6 @@ fn filetype(file: &File, metadata: &Metadata) -> Result<host::__wasi_filetype_t>
Ok(host::__WASI_FILETYPE_CHARACTER_DEVICE)
} else if ftype.is_block_device() {
Ok(host::__WASI_FILETYPE_BLOCK_DEVICE)
} else if ftype.is_fifo() {
Ok(host::__WASI_FILETYPE_SOCKET_STREAM)
} else if ftype.is_socket() {
match socket::getsockopt(file.as_raw_fd(), socket::sockopt::SockType)
.map_err(|err| err.as_errno().unwrap())