axfs_devfs/
zero.rs

1use axfs_vfs::{VfsNodeAttr, VfsNodeOps, VfsNodePerm, VfsNodeType, VfsResult};
2
3/// A zero device behaves like `/dev/zero`.
4///
5/// It always returns a chunk of `\0` bytes when read, and all writes are discarded.
6pub struct ZeroDev;
7
8impl VfsNodeOps for ZeroDev {
9    fn get_attr(&self) -> VfsResult<VfsNodeAttr> {
10        Ok(VfsNodeAttr::new(
11            VfsNodePerm::default_file(),
12            VfsNodeType::CharDevice,
13            0,
14            0,
15        ))
16    }
17
18    fn read_at(&self, _offset: u64, buf: &mut [u8]) -> VfsResult<usize> {
19        buf.fill(0);
20        Ok(buf.len())
21    }
22
23    fn write_at(&self, _offset: u64, buf: &[u8]) -> VfsResult<usize> {
24        Ok(buf.len())
25    }
26
27    fn truncate(&self, _size: u64) -> VfsResult {
28        Ok(())
29    }
30
31    axfs_vfs::impl_vfs_non_dir_default! {}
32}