diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index 9ad2982..1fc8e53 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,66 @@ extern crate fuse; extern crate libc; extern crate rafs; +extern crate time; use rafs::data::get_data1; use rafs::data::SimpleFsData; -use fuse::{Filesystem, Request, ReplyEntry, ReplyAttr, ReplyDirectory, ReplyData}; +use fuse::{Filesystem, Request, ReplyEntry, ReplyAttr, ReplyDirectory, ReplyData, FileAttr, FileType}; use libc::ENOENT; use std::ffi::OsStr; +use time::Timespec; struct MemFs { data: SimpleFsData, } +const CREATE_TIME: Timespec = Timespec { sec: 1494802762, nsec: 0 }; + +fn getAttr(file: SimpleFsData) -> FileAttr { + fn fileAttr(ino: u64, len: usize) -> FileAttr { + FileAttr { + ino: ino, + size: len as u64, + blocks: 1, + atime: CREATE_TIME, + mtime: CREATE_TIME, + ctime: CREATE_TIME, + crtime: CREATE_TIME, + kind: FileType::RegularFile, + perm: 0o755, + nlink: 1, + uid: 501, + gid: 20, + rdev: 0, + flags: 0, + } + } + + fn dirAttr(ino: u64, children: usize) -> FileAttr { + FileAttr { + ino: ino, + size: 0, + blocks: 1, + atime: CREATE_TIME, + mtime: CREATE_TIME, + ctime: CREATE_TIME, + crtime: CREATE_TIME, + kind: FileType::Directory, + perm: 0o755, + nlink: children as u32, + uid: 501, + gid: 20, + rdev: 0, + flags: 0, + } + } + + match file { + SimpleFsData::File(ino, name) => fileAttr(ino, name.len()), + SimpleFsData::Directory(ino, children) => dirAttr(ino, children.len()), + } +} + impl Filesystem for MemFs { fn lookup(&mut self, _req: &Request, _parent: u64, _name: &OsStr, reply: ReplyEntry) { |