summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs51
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) {