Treat FIFOs' type as __WASI_FILETYPE_UNKNOWN.
This commit is contained in:
committed by
Dan Gohman
parent
c2d2b8066b
commit
85a41d449c
@@ -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);
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user