34 lines
1014 B
Rust
34 lines
1014 B
Rust
extern crate spin;
|
|
|
|
use redoxfs;
|
|
use syscall::{Packet, Scheme};
|
|
use std::fs::File;
|
|
use std::io::{Read, Write};
|
|
use std::path::Path;
|
|
|
|
use self::scheme::FileScheme;
|
|
|
|
pub mod resource;
|
|
pub mod scheme;
|
|
|
|
pub fn mount<P: AsRef<Path>>(filesystem: redoxfs::FileSystem, mountpoint: &P, mut write: File) {
|
|
let mountpoint = mountpoint.as_ref();
|
|
match File::create(format!(":{}", mountpoint.display())) {
|
|
Ok(mut socket) => {
|
|
println!("redoxfs: mounted filesystem on {}:", mountpoint.display());
|
|
|
|
let _ = write.write(&[0]);
|
|
drop(write);
|
|
|
|
let scheme = FileScheme::new(format!("{}", mountpoint.display()), filesystem);
|
|
loop {
|
|
let mut packet = Packet::default();
|
|
socket.read(&mut packet).unwrap();
|
|
scheme.handle(&mut packet);
|
|
socket.write(&packet).unwrap();
|
|
}
|
|
},
|
|
Err(err) => println!("redoxfs: failed to create {} scheme: {}", mountpoint.display(), err)
|
|
}
|
|
}
|