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