wiggle flags are now bitflags!

This commit is contained in:
Pat Hickey
2021-01-11 18:33:52 -08:00
parent b53aecb367
commit e7018bf6e0

View File

@@ -329,10 +329,10 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
let fd = u32::from(fd); let fd = u32::from(fd);
let table = self.table(); let table = self.table();
// Validate flags // Validate flags
let set_atim = fst_flags.contains(&types::Fstflags::ATIM); let set_atim = fst_flags.contains(types::Fstflags::ATIM);
let set_atim_now = fst_flags.contains(&types::Fstflags::ATIM_NOW); let set_atim_now = fst_flags.contains(types::Fstflags::ATIM_NOW);
let set_mtim = fst_flags.contains(&types::Fstflags::MTIM); let set_mtim = fst_flags.contains(types::Fstflags::MTIM);
let set_mtim_now = fst_flags.contains(&types::Fstflags::MTIM_NOW); let set_mtim_now = fst_flags.contains(types::Fstflags::MTIM_NOW);
if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) { if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) {
return Err(Error::Inval); return Err(Error::Inval);
} }
@@ -692,10 +692,10 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
let path = path.as_str()?; let path = path.as_str()?;
// XXX DRY these are in fd_filestat_set_times twice! // XXX DRY these are in fd_filestat_set_times twice!
let set_atim = fst_flags.contains(&types::Fstflags::ATIM); let set_atim = fst_flags.contains(types::Fstflags::ATIM);
let set_atim_now = fst_flags.contains(&types::Fstflags::ATIM_NOW); let set_atim_now = fst_flags.contains(types::Fstflags::ATIM_NOW);
let set_mtim = fst_flags.contains(&types::Fstflags::MTIM); let set_mtim = fst_flags.contains(types::Fstflags::MTIM);
let set_mtim_now = fst_flags.contains(&types::Fstflags::MTIM_NOW); let set_mtim_now = fst_flags.contains(types::Fstflags::MTIM_NOW);
if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) { if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) {
return Err(Error::Inval); return Err(Error::Inval);
} }
@@ -736,7 +736,7 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
let src_dir = src_entry.get_cap(DirCaps::LINK_SOURCE)?; let src_dir = src_entry.get_cap(DirCaps::LINK_SOURCE)?;
let target_entry: Ref<DirEntry> = table.get(u32::from(target_fd))?; let target_entry: Ref<DirEntry> = table.get(u32::from(target_fd))?;
let target_dir = target_entry.get_cap(DirCaps::LINK_TARGET)?; let target_dir = target_entry.get_cap(DirCaps::LINK_TARGET)?;
let symlink_follow = src_flags.contains(&types::Lookupflags::SYMLINK_FOLLOW); let symlink_follow = src_flags.contains(types::Lookupflags::SYMLINK_FOLLOW);
src_dir.hard_link( src_dir.hard_link(
src_path.as_str()?.deref(), src_path.as_str()?.deref(),
@@ -763,7 +763,7 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
} }
let dir_entry: Ref<DirEntry> = table.get(dirfd)?; let dir_entry: Ref<DirEntry> = table.get(dirfd)?;
let symlink_follow = dirflags.contains(&types::Lookupflags::SYMLINK_FOLLOW); let symlink_follow = dirflags.contains(types::Lookupflags::SYMLINK_FOLLOW);
let oflags = OFlags::from(&oflags); let oflags = OFlags::from(&oflags);
let fdflags = FdFlags::from(&fdflags); let fdflags = FdFlags::from(&fdflags);
@@ -1020,40 +1020,40 @@ impl From<&FileCaps> for types::Rights {
impl From<&types::Rights> for FileCaps { impl From<&types::Rights> for FileCaps {
fn from(rights: &types::Rights) -> FileCaps { fn from(rights: &types::Rights) -> FileCaps {
let mut caps = FileCaps::empty(); let mut caps = FileCaps::empty();
if rights.contains(&types::Rights::FD_DATASYNC) { if rights.contains(types::Rights::FD_DATASYNC) {
caps = caps | FileCaps::DATASYNC; caps = caps | FileCaps::DATASYNC;
} }
if rights.contains(&types::Rights::FD_READ) { if rights.contains(types::Rights::FD_READ) {
caps = caps | FileCaps::READ; caps = caps | FileCaps::READ;
} }
if rights.contains(&types::Rights::FD_SEEK) { if rights.contains(types::Rights::FD_SEEK) {
caps = caps | FileCaps::SEEK; caps = caps | FileCaps::SEEK;
} }
if rights.contains(&types::Rights::FD_FDSTAT_SET_FLAGS) { if rights.contains(types::Rights::FD_FDSTAT_SET_FLAGS) {
caps = caps | FileCaps::FDSTAT_SET_FLAGS; caps = caps | FileCaps::FDSTAT_SET_FLAGS;
} }
if rights.contains(&types::Rights::FD_SYNC) { if rights.contains(types::Rights::FD_SYNC) {
caps = caps | FileCaps::SYNC; caps = caps | FileCaps::SYNC;
} }
if rights.contains(&types::Rights::FD_TELL) { if rights.contains(types::Rights::FD_TELL) {
caps = caps | FileCaps::TELL; caps = caps | FileCaps::TELL;
} }
if rights.contains(&types::Rights::FD_WRITE) { if rights.contains(types::Rights::FD_WRITE) {
caps = caps | FileCaps::WRITE; caps = caps | FileCaps::WRITE;
} }
if rights.contains(&types::Rights::FD_ADVISE) { if rights.contains(types::Rights::FD_ADVISE) {
caps = caps | FileCaps::ADVISE; caps = caps | FileCaps::ADVISE;
} }
if rights.contains(&types::Rights::FD_ALLOCATE) { if rights.contains(types::Rights::FD_ALLOCATE) {
caps = caps | FileCaps::ALLOCATE; caps = caps | FileCaps::ALLOCATE;
} }
if rights.contains(&types::Rights::FD_FILESTAT_GET) { if rights.contains(types::Rights::FD_FILESTAT_GET) {
caps = caps | FileCaps::FILESTAT_GET; caps = caps | FileCaps::FILESTAT_GET;
} }
if rights.contains(&types::Rights::FD_FILESTAT_SET_SIZE) { if rights.contains(types::Rights::FD_FILESTAT_SET_SIZE) {
caps = caps | FileCaps::FILESTAT_SET_SIZE; caps = caps | FileCaps::FILESTAT_SET_SIZE;
} }
if rights.contains(&types::Rights::FD_FILESTAT_SET_TIMES) { if rights.contains(types::Rights::FD_FILESTAT_SET_TIMES) {
caps = caps | FileCaps::FILESTAT_SET_TIMES; caps = caps | FileCaps::FILESTAT_SET_TIMES;
} }
caps caps
@@ -1120,52 +1120,52 @@ impl From<&DirCaps> for types::Rights {
impl From<&types::Rights> for DirCaps { impl From<&types::Rights> for DirCaps {
fn from(rights: &types::Rights) -> DirCaps { fn from(rights: &types::Rights) -> DirCaps {
let mut caps = DirCaps::empty(); let mut caps = DirCaps::empty();
if rights.contains(&types::Rights::PATH_CREATE_DIRECTORY) { if rights.contains(types::Rights::PATH_CREATE_DIRECTORY) {
caps = caps | DirCaps::CREATE_DIRECTORY; caps = caps | DirCaps::CREATE_DIRECTORY;
} }
if rights.contains(&types::Rights::PATH_CREATE_FILE) { if rights.contains(types::Rights::PATH_CREATE_FILE) {
caps = caps | DirCaps::CREATE_FILE; caps = caps | DirCaps::CREATE_FILE;
} }
if rights.contains(&types::Rights::PATH_LINK_SOURCE) { if rights.contains(types::Rights::PATH_LINK_SOURCE) {
caps = caps | DirCaps::LINK_SOURCE; caps = caps | DirCaps::LINK_SOURCE;
} }
if rights.contains(&types::Rights::PATH_LINK_TARGET) { if rights.contains(types::Rights::PATH_LINK_TARGET) {
caps = caps | DirCaps::LINK_TARGET; caps = caps | DirCaps::LINK_TARGET;
} }
if rights.contains(&types::Rights::PATH_OPEN) { if rights.contains(types::Rights::PATH_OPEN) {
caps = caps | DirCaps::OPEN; caps = caps | DirCaps::OPEN;
} }
if rights.contains(&types::Rights::FD_READDIR) { if rights.contains(types::Rights::FD_READDIR) {
caps = caps | DirCaps::READDIR; caps = caps | DirCaps::READDIR;
} }
if rights.contains(&types::Rights::PATH_READLINK) { if rights.contains(types::Rights::PATH_READLINK) {
caps = caps | DirCaps::READLINK; caps = caps | DirCaps::READLINK;
} }
if rights.contains(&types::Rights::PATH_RENAME_SOURCE) { if rights.contains(types::Rights::PATH_RENAME_SOURCE) {
caps = caps | DirCaps::RENAME_SOURCE; caps = caps | DirCaps::RENAME_SOURCE;
} }
if rights.contains(&types::Rights::PATH_RENAME_TARGET) { if rights.contains(types::Rights::PATH_RENAME_TARGET) {
caps = caps | DirCaps::RENAME_TARGET; caps = caps | DirCaps::RENAME_TARGET;
} }
if rights.contains(&types::Rights::PATH_SYMLINK) { if rights.contains(types::Rights::PATH_SYMLINK) {
caps = caps | DirCaps::SYMLINK; caps = caps | DirCaps::SYMLINK;
} }
if rights.contains(&types::Rights::PATH_REMOVE_DIRECTORY) { if rights.contains(types::Rights::PATH_REMOVE_DIRECTORY) {
caps = caps | DirCaps::REMOVE_DIRECTORY; caps = caps | DirCaps::REMOVE_DIRECTORY;
} }
if rights.contains(&types::Rights::PATH_UNLINK_FILE) { if rights.contains(types::Rights::PATH_UNLINK_FILE) {
caps = caps | DirCaps::UNLINK_FILE; caps = caps | DirCaps::UNLINK_FILE;
} }
if rights.contains(&types::Rights::PATH_FILESTAT_GET) { if rights.contains(types::Rights::PATH_FILESTAT_GET) {
caps = caps | DirCaps::PATH_FILESTAT_GET; caps = caps | DirCaps::PATH_FILESTAT_GET;
} }
if rights.contains(&types::Rights::PATH_FILESTAT_SET_TIMES) { if rights.contains(types::Rights::PATH_FILESTAT_SET_TIMES) {
caps = caps | DirCaps::PATH_FILESTAT_SET_TIMES; caps = caps | DirCaps::PATH_FILESTAT_SET_TIMES;
} }
if rights.contains(&types::Rights::FD_FILESTAT_GET) { if rights.contains(types::Rights::FD_FILESTAT_GET) {
caps = caps | DirCaps::FILESTAT_GET; caps = caps | DirCaps::FILESTAT_GET;
} }
if rights.contains(&types::Rights::FD_FILESTAT_SET_TIMES) { if rights.contains(types::Rights::FD_FILESTAT_SET_TIMES) {
caps = caps | DirCaps::FILESTAT_SET_TIMES; caps = caps | DirCaps::FILESTAT_SET_TIMES;
} }
caps caps
@@ -1211,19 +1211,19 @@ impl From<&FdFlags> for types::Fdflags {
impl From<&types::Fdflags> for FdFlags { impl From<&types::Fdflags> for FdFlags {
fn from(fdflags: &types::Fdflags) -> FdFlags { fn from(fdflags: &types::Fdflags) -> FdFlags {
let mut out = FdFlags::empty(); let mut out = FdFlags::empty();
if fdflags.contains(&types::Fdflags::APPEND) { if fdflags.contains(types::Fdflags::APPEND) {
out = out | FdFlags::APPEND; out = out | FdFlags::APPEND;
} }
if fdflags.contains(&types::Fdflags::DSYNC) { if fdflags.contains(types::Fdflags::DSYNC) {
out = out | FdFlags::DSYNC; out = out | FdFlags::DSYNC;
} }
if fdflags.contains(&types::Fdflags::NONBLOCK) { if fdflags.contains(types::Fdflags::NONBLOCK) {
out = out | FdFlags::NONBLOCK; out = out | FdFlags::NONBLOCK;
} }
if fdflags.contains(&types::Fdflags::RSYNC) { if fdflags.contains(types::Fdflags::RSYNC) {
out = out | FdFlags::RSYNC; out = out | FdFlags::RSYNC;
} }
if fdflags.contains(&types::Fdflags::SYNC) { if fdflags.contains(types::Fdflags::SYNC) {
out = out | FdFlags::SYNC; out = out | FdFlags::SYNC;
} }
out out
@@ -1233,16 +1233,16 @@ impl From<&types::Fdflags> for FdFlags {
impl From<&types::Oflags> for OFlags { impl From<&types::Oflags> for OFlags {
fn from(oflags: &types::Oflags) -> OFlags { fn from(oflags: &types::Oflags) -> OFlags {
let mut out = OFlags::empty(); let mut out = OFlags::empty();
if oflags.contains(&types::Oflags::CREAT) { if oflags.contains(types::Oflags::CREAT) {
out = out | OFlags::CREATE; out = out | OFlags::CREATE;
} }
if oflags.contains(&types::Oflags::DIRECTORY) { if oflags.contains(types::Oflags::DIRECTORY) {
out = out | OFlags::DIRECTORY; out = out | OFlags::DIRECTORY;
} }
if oflags.contains(&types::Oflags::EXCL) { if oflags.contains(types::Oflags::EXCL) {
out = out | OFlags::EXCLUSIVE; out = out | OFlags::EXCLUSIVE;
} }
if oflags.contains(&types::Oflags::TRUNC) { if oflags.contains(types::Oflags::TRUNC) {
out = out | OFlags::TRUNCATE; out = out | OFlags::TRUNCATE;
} }
out out