Initial working commit
This commit is contained in:
46
bin/main.ml
Normal file
46
bin/main.ml
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
|
||||
module Octal = Octal
|
||||
module Tar = Tar
|
||||
|
||||
let clean_path path =
|
||||
let clean_split = List.filter (fun x -> (not (String.equal x "")) && (not (String.equal x "."))) in
|
||||
clean_split (String.split_on_char '/' (String.trim path))
|
||||
|
||||
|
||||
let (root, tar_ch) = Tar.parse_tar "asd.tar"
|
||||
let () = Tar.print_tree "" root
|
||||
|
||||
let getattr path =
|
||||
match Tar.find_from_split (clean_path path) root with
|
||||
| None -> raise (Unix.Unix_error (Unix.ENOENT, "hi1", "hi1"))
|
||||
| Some (File (_, md)) -> md
|
||||
| Some (Directory (_, md)) -> md
|
||||
|
||||
let readdir path _ =
|
||||
match Tar.find_from_split (clean_path path) root with
|
||||
| None -> raise (Unix.Unix_error (Unix.ENOENT, "234", "234"))
|
||||
| Some (File (_, _)) -> raise (Unix.Unix_error (Unix.ENOENT, "345", "345"))
|
||||
| Some (Directory (children, _)) ->
|
||||
["."; ".."] @ (List.map (fun (name, _) -> name) (Tar.NameMap.to_list children))
|
||||
|
||||
let read path buf offset amount =
|
||||
match Tar.find_from_split (clean_path path) root with
|
||||
| None -> raise (Unix.Unix_error (Unix.ENOENT, "read", path))
|
||||
| Some (File (fo, md)) ->
|
||||
(let (file_buf,read) = (Tar.read_file (File (fo, md)) tar_ch offset amount) in
|
||||
Bytes.iteri (fun i c -> Bigarray.Array1.set buf i c) file_buf;
|
||||
read)
|
||||
| _ -> raise (Unix.Unix_error (Unix.EISDIR, "read", path))
|
||||
|
||||
let _ =
|
||||
let () = Printf.printf "hmmm?\n" in
|
||||
let () = List.iter (fun x -> Printf.printf "%s\n" x) (readdir "bin" 5) in
|
||||
let () = Out_channel.flush_all () in
|
||||
Fuse.main Sys.argv
|
||||
{
|
||||
Fuse.default_operations with
|
||||
getattr = getattr;
|
||||
readdir = readdir;
|
||||
read = read;
|
||||
}
|
||||
Reference in New Issue
Block a user