abi: add fsync()/truncate()
This commit is contained in:
parent
dfa6f7c296
commit
e5b287e090
@ -3,8 +3,9 @@ use core::mem::MaybeUninit;
|
||||
pub(crate) use abi::{
|
||||
error::Error,
|
||||
io::{
|
||||
AccessMode, DirectoryEntry, FileAttr, FileMode, MountOptions, OpenOptions, PipeOptions,
|
||||
PollControl, RawFd, TerminalOptions, TerminalSize, TimerOptions, UnmountOptions,
|
||||
AccessMode, DirectoryEntry, FileAttr, FileMode, FileSync, MountOptions, OpenOptions,
|
||||
PipeOptions, PollControl, RawFd, TerminalOptions, TerminalSize, TimerOptions,
|
||||
UnmountOptions,
|
||||
},
|
||||
mem::{MappingFlags, MappingSource},
|
||||
net::SocketType,
|
||||
|
@ -4,7 +4,7 @@ use abi::{
|
||||
error::Error,
|
||||
io::{
|
||||
AccessMode, ChannelPublisherId, DeviceRequest, DirectoryEntry, FileAttr, FileControl,
|
||||
FileMetadataUpdate, FileMode, FilesystemControl, MessageDestination, OpenOptions,
|
||||
FileMetadataUpdate, FileMode, FileSync, FilesystemControl, MessageDestination, OpenOptions,
|
||||
PipeOptions, PollControl, RawFd, ReceivedMessageMetadata, Rename, SeekFrom, SentMessage,
|
||||
TerminalOptions, TerminalSize, TimerOptions,
|
||||
},
|
||||
@ -95,6 +95,18 @@ pub(crate) fn read(fd: RawFd, buffer: &mut [u8]) -> Result<usize, Error> {
|
||||
run_with_io(&process, |io| io.files.file(fd)?.read(buffer))
|
||||
}
|
||||
|
||||
pub(crate) fn truncate(fd: RawFd, size: u64) -> Result<(), Error> {
|
||||
let _ = fd;
|
||||
let _ = size;
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub(crate) fn fsync(fd: RawFd, what: FileSync) -> Result<(), Error> {
|
||||
let _ = fd;
|
||||
let _ = what;
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub(crate) fn read_at(fd: RawFd, pos: u64, buffer: &mut [u8]) -> Result<usize, Error> {
|
||||
let thread = Thread::current();
|
||||
let process = thread.process();
|
||||
|
@ -32,6 +32,11 @@ bitfield FileMode(u32) {
|
||||
USER_READ: 8,
|
||||
}
|
||||
|
||||
bitfield FileSync(u32) {
|
||||
DATA: 0,
|
||||
METADATA: 1,
|
||||
}
|
||||
|
||||
bitfield AccessMode(u32) {
|
||||
READ: 0,
|
||||
WRITE: 1,
|
||||
|
@ -117,6 +117,8 @@ syscall close(fd: RawFd) -> Result<()>;
|
||||
syscall write(fd: RawFd, data: &[u8]) -> Result<usize>;
|
||||
syscall read(fd: RawFd, data: &mut [u8]) -> Result<usize>;
|
||||
syscall seek(fd: RawFd, pos: SeekFrom, output: &mut u64) -> Result<()>;
|
||||
syscall truncate(fd: RawFd, size: u64) -> Result<()>;
|
||||
syscall fsync(fd: RawFd, what: FileSync) -> Result<()>;
|
||||
syscall read_at(fd: RawFd, pos: u64, data: &mut [u8]) -> Result<usize>;
|
||||
syscall write_at(fd: RawFd, pos: u64, data: &[u8]) -> Result<usize>;
|
||||
|
||||
|
@ -2,6 +2,8 @@ use core::fmt;
|
||||
|
||||
use abi_lib::SyscallRegister;
|
||||
|
||||
use crate::time::SystemTime;
|
||||
|
||||
use super::FileMode;
|
||||
|
||||
/// Describes an action done on a file descriptor
|
||||
@ -21,11 +23,24 @@ pub enum FileMetadataUpdateMode {
|
||||
AndNot,
|
||||
}
|
||||
|
||||
/// Describes how file times are updated
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct FileTimesUpdate {
|
||||
/// Last accessed time
|
||||
pub atime: Option<SystemTime>,
|
||||
/// Last modified time
|
||||
pub mtime: Option<SystemTime>,
|
||||
/// Created time
|
||||
pub ctime: Option<SystemTime>,
|
||||
}
|
||||
|
||||
/// Describes a modification to a file's metadata
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum FileMetadataUpdate {
|
||||
/// Changes file permissions
|
||||
Permissions(FileMode, FileMetadataUpdateMode),
|
||||
/// Changes file mtime/atime/ctime
|
||||
Times(FileTimesUpdate),
|
||||
}
|
||||
|
||||
/// Describes a seek operation for a regular file
|
||||
|
@ -6,12 +6,14 @@ mod input;
|
||||
mod terminal;
|
||||
|
||||
pub use crate::generated::{
|
||||
AccessMode, DirectoryEntry, FileAttr, FileMode, FileType, GroupId, MountOptions, OpenOptions,
|
||||
PipeOptions, PollControl, RawFd, TimerOptions, UnmountOptions, UserId,
|
||||
AccessMode, DirectoryEntry, FileAttr, FileMode, FileSync, FileType, GroupId, MountOptions,
|
||||
OpenOptions, PipeOptions, PollControl, RawFd, TimerOptions, UnmountOptions, UserId,
|
||||
};
|
||||
pub use channel::{ChannelPublisherId, MessageDestination, ReceivedMessageMetadata, SentMessage};
|
||||
pub use device::{DeviceRequest, Framebuffer};
|
||||
pub use file::{FileControl, FileMetadataUpdate, FileMetadataUpdateMode, SeekFrom};
|
||||
pub use file::{
|
||||
FileControl, FileMetadataUpdate, FileMetadataUpdateMode, FileTimesUpdate, SeekFrom,
|
||||
};
|
||||
pub use filesystem::FilesystemControl;
|
||||
pub use input::{KeyboardKey, KeyboardKeyCode, KeyboardKeyEvent};
|
||||
pub use terminal::{
|
||||
|
@ -25,7 +25,8 @@ use core::str::FromStr;
|
||||
|
||||
pub use abi::io::{
|
||||
AccessMode, DirectoryEntry, FileAttr, FileMetadataUpdate, FileMetadataUpdateMode, FileMode,
|
||||
FileType, OpenOptions, PipeOptions, RawFd, Rename, SeekFrom, TimerOptions,
|
||||
FileSync, FileTimesUpdate, FileType, OpenOptions, PipeOptions, RawFd, Rename, SeekFrom,
|
||||
TimerOptions,
|
||||
};
|
||||
|
||||
use abi::{error::Error, io::DeviceRequest, process::ProcessOption, util::FixedString};
|
||||
|
@ -16,9 +16,9 @@ mod generated {
|
||||
use abi::{
|
||||
error::Error,
|
||||
io::{
|
||||
AccessMode, ChannelPublisherId, DirectoryEntry, FileAttr, FileMode, MountOptions,
|
||||
OpenOptions, PipeOptions, PollControl, RawFd, TerminalOptions, TerminalSize,
|
||||
TimerOptions, UnmountOptions,
|
||||
AccessMode, ChannelPublisherId, DirectoryEntry, FileAttr, FileMode, FileSync,
|
||||
MountOptions, OpenOptions, PipeOptions, PollControl, RawFd, TerminalOptions,
|
||||
TerminalSize, TimerOptions, UnmountOptions,
|
||||
},
|
||||
mem::{MappingFlags, MappingSource},
|
||||
net::SocketType,
|
||||
|
Loading…
x
Reference in New Issue
Block a user