From 503145f4dfc16001ebbba6c0ace5ce505c151a71 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Fri, 12 May 2017 21:33:06 -0400 Subject: Restructure project. --- Cargo.toml | 8 ++++++++ default.nix | 16 ++++++++++++---- src/data.rs | 16 ++++++++++++++++ src/lib.rs | 1 + src/main.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ v1/Cargo.toml | 8 -------- v1/src/data.rs | 13 ------------- v1/src/lib.rs | 1 - v1/src/main.rs | 36 ------------------------------------ 9 files changed, 87 insertions(+), 62 deletions(-) create mode 100644 Cargo.toml create mode 100644 src/data.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs delete mode 100644 v1/Cargo.toml delete mode 100644 v1/src/data.rs delete mode 100644 v1/src/lib.rs delete mode 100644 v1/src/main.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a126a80 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "v1" +version = "0.1.0" +authors = ["Kjetil Orbekk "] + +[dependencies] +fuse = "0.3" +libc = "0.2" diff --git a/default.nix b/default.nix index 65d93ef..99e7ecd 100644 --- a/default.nix +++ b/default.nix @@ -1,8 +1,16 @@ with import {}; - +with rustPlatform; { - rustenv = stdenv.mkDerivation { - name = "rust"; - buildInputs = [ rustStable.rustc rustStable.cargo fuse pkgconfig ]; + rafs1 = buildRustPackage rec { + name = "rafs-${version}"; + version = "0.1"; + buildInputs = [ fuse pkgconfig glibc ]; + logLevel = "debug"; + src = fetchgit { + url = "https://git.orbekk.com/git/rafs.git" + rev = "35f5d3c514b640d3b99c643890bb4a655025994d"; + sha256 = "1i5nr70jdqhfjmpnmcgnsyinh7rd3gaz2ka0adi9x5z0dx1ijg6g"; + }; + depsSha256 = "1i5nr70jdqhfjmpnmcgnsyinh7rd3gaz2ka0adi9x5z0dx1ijg6g"; }; } diff --git a/src/data.rs b/src/data.rs new file mode 100644 index 0000000..f652a13 --- /dev/null +++ b/src/data.rs @@ -0,0 +1,16 @@ +pub static MESSAGE: &'static str = "Hello"; + +#[derive(Debug)] +pub enum SimpleFsData { + File(u64, String), + Directory(u64, Vec<(String, SimpleFsData)>) +} + +// pub static HELLO: &'static SimpleFsData = +// SimpleFsData:File("hello.txt", "Hello World"); + +pub fn get_data1() -> SimpleFsData { + SimpleFsData::Directory( + 1, vec!(("hello".to_string(), + SimpleFsData::File(2, "Hello, World!".to_string())))) +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..7a345e4 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod data; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..babac6a --- /dev/null +++ b/src/main.rs @@ -0,0 +1,50 @@ +extern crate fuse; +extern crate libc; +extern crate v1; + +use v1::data::get_data1; +use v1::data::SimpleFsData; +use fuse::{Filesystem, Request, ReplyEntry, ReplyAttr, ReplyDirectory, ReplyData}; +use libc::ENOENT; +use std::ffi::OsStr; + +struct MemFs { + data: SimpleFsData, +} + +impl Filesystem for MemFs { + fn lookup(&mut self, _req: &Request, _parent: u64, _name: &OsStr, + reply: ReplyEntry) { + reply.error(ENOENT); + } + + fn getattr(&mut self, _req: &Request, _ino: u64, reply: ReplyAttr) { + reply.error(ENOENT); + } + + fn read(&mut self, _req: &Request, _ino: u64, _fh: u64, _offset: u64, + _size: u32, reply: ReplyData) { + reply.error(ENOENT); + } + fn readdir (&mut self, _req: &Request, ino: u64, _fh: u64, offset: u64, + reply: ReplyDirectory) { + reply.error(ENOENT); + } +} + +fn usage() { + println!("{} ", std::env::args().nth(0).unwrap()); +} + +fn mount(mountpoint: &OsStr) { + let fs = MemFs { data: get_data1() }; + fuse::mount(fs, &mountpoint, &[]).unwrap() +} + +fn main() { + println!("{:?}", get_data1()); + match std::env::args_os().nth(1) { + Some(mountpoint) => mount(&mountpoint), + None => usage(), + } +} diff --git a/v1/Cargo.toml b/v1/Cargo.toml deleted file mode 100644 index a126a80..0000000 --- a/v1/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "v1" -version = "0.1.0" -authors = ["Kjetil Orbekk "] - -[dependencies] -fuse = "0.3" -libc = "0.2" diff --git a/v1/src/data.rs b/v1/src/data.rs deleted file mode 100644 index 4b1da5a..0000000 --- a/v1/src/data.rs +++ /dev/null @@ -1,13 +0,0 @@ -pub static MESSAGE: &'static str = "Hello"; - -pub enum SimpleFsData { - File(String, String), - Directory(String, Vec) -} - -// pub static HELLO: &'static SimpleFsData = -// SimpleFsData:File("hello.txt", "Hello World"); - -pub fn getData1() -> SimpleFsData { - SimpleFsData::File("hello.txt".to_string(), "Hello".to_string()) -} diff --git a/v1/src/lib.rs b/v1/src/lib.rs deleted file mode 100644 index 7a345e4..0000000 --- a/v1/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod data; diff --git a/v1/src/main.rs b/v1/src/main.rs deleted file mode 100644 index 29196b0..0000000 --- a/v1/src/main.rs +++ /dev/null @@ -1,36 +0,0 @@ -extern crate fuse; -extern crate libc; -extern crate v1; - -use v1::data::MESSAGE; -use fuse::{Filesystem, Request, ReplyEntry, ReplyAttr, ReplyDirectory, ReplyData}; -use libc::ENOENT; -use std::ffi::OsStr; - -struct MemFs; - -impl Filesystem for MemFs { - fn lookup(&mut self, _req: &Request, _parent: u64, _name: &OsStr, - reply: ReplyEntry) { - reply.error(ENOENT); - } - - fn getattr(&mut self, _req: &Request, _ino: u64, reply: ReplyAttr) { - reply.error(ENOENT); - } - - fn read(&mut self, _req: &Request, _ino: u64, _fh: u64, _offset: u64, - _size: u32, reply: ReplyData) { - reply.error(ENOENT); - } - fn readdir (&mut self, _req: &Request, ino: u64, _fh: u64, offset: u64, - reply: ReplyDirectory) { - reply.error(ENOENT); - } -} - -fn main() { - println!("{}", MESSAGE); - let mountpoint = std::env::args_os().nth(1).unwrap(); - fuse::mount(MemFs, &mountpoint, &[]).unwrap(); -} -- cgit v1.2.3