basic virtual file system
All checks were successful
continuous-integration/drone/push Build is passing

Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
Julien CLEMENT 2022-12-23 20:02:49 +01:00
parent 8518982932
commit b2ffbc34b5
3 changed files with 33 additions and 3 deletions

@ -18,7 +18,7 @@ pub struct IsoFS {
#[async_trait(?Send)]
impl FileSystem for IsoFS {
async fn open(path: &str, flags: u32) -> Option<FDt> {
async fn open(&mut self, path: &str, flags: u32) -> Option<FDt> {
if flags != crate::syscalls::io::O_RDONLY {
return None;
}

@ -1,11 +1,41 @@
pub mod iso;
use crate::fd::FDt;
use crate::utils::mutex::AsyncMutex;
use alloc::{sync::Arc, boxed::Box};
use async_trait::async_trait;
use core::cell::RefCell;
use lazy_static::lazy_static;
pub type FSt = Arc<RefCell<dyn FileSystem>>;
lazy_static! {
pub static ref VIRTUAL_FS: AsyncMutex<VirtualFS> = {
AsyncMutex::new(VirtualFS::new())
};
}
#[async_trait(?Send)]
pub trait FileSystem {
async fn open(path: &str, flags: u32) -> Option<FDt>;
async fn open(&mut self, path: &str, flags: u32) -> Option<FDt>;
}
pub struct VirtualFS {
fs: FSt,
}
impl VirtualFS {
fn new() -> Self {
VirtualFS {
fs: Arc::new(RefCell::new(iso::IsoFS {}))
}
}
}
#[async_trait(?Send)]
impl FileSystem for VirtualFS {
async fn open(&mut self, path: &str, flags: u32) -> Option<FDt> {
self.fs.borrow_mut().open(path, flags).await
}
}

@ -66,6 +66,6 @@ pub extern "C" fn julios_main(multiboot_info_addr: usize) -> ! {
async fn get_file() {
let fd = fs::iso::IsoFS::open("test", syscalls::io::O_RDONLY).await.unwrap();
let fd = fs::VIRTUAL_FS.lock().await.open("test", syscalls::io::O_RDONLY).await.unwrap();
fd.borrow_mut().read(&[], 0).await;
}