summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: cdaa8e0071f824f81b8b1a8a7ea3378265c76529 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use std::env;
use std::io;
use std::fs;
use std::os::unix::fs::PermissionsExt;
use std::os::linux::fs::MetadataExt;

mod fswalk;
use fswalk::DirTree;

// Command line args are names of dirs, recursively list all files and
// dirs them
fn main() -> io::Result<()> {
    for dirname in env::args().skip(1) {
        let tree = DirTree::new(&dirname);
        for entry in tree {
            write_info(&entry.path(), &entry.metadata());
        }
    }
    Ok(())
}


fn write_info(path: &str, meta: &fs::Metadata) {
    println!("Name: {}", path);
    println!("Mtime: {}", format_mtime(meta));
    println!("Mode: {}", format_mode(meta));
    println!("Ino: {}", format_inode(meta));
    println!("Dev: {}", format_dev(meta));
    println!("Nlink: {}", format_nlink(meta));
    println!("Size: {}", format_size(meta));
    println!("Uid: {}", format_uid(meta));
    println!("Username: {}", format_username(meta));
    println!("Gid: {}", format_gid(meta));
    println!("Group: {}", format_group(meta));
    println!("SHA256: xxx");
    println!("");
}


fn format_mtime(meta: &fs::Metadata) -> String {
    let mtime = meta.modified().unwrap();
    format!("{:?}", mtime)
}


fn format_mode(meta: &fs::Metadata) -> String {
    let mode = meta.permissions().mode();
    format!("{:06o}", mode)
}


fn format_inode(meta: &fs::Metadata) -> String {
    format!("{}", meta.st_ino())
}


fn format_dev(meta: &fs::Metadata) -> String {
    format!("{}", meta.st_dev())
}


fn format_nlink(meta: &fs::Metadata) -> String {
    format!("{}", meta.st_nlink())
}


fn format_size(meta: &fs::Metadata) -> String {
    format!("{}", meta.len())
}


fn format_uid(meta: &fs::Metadata) -> String {
    format!("{}", meta.st_uid())
}


fn format_gid(meta: &fs::Metadata) -> String {
    format!("{}", meta.st_gid())
}


fn format_username(meta: &fs::Metadata) -> String {
    format!("xxx")
}


fn format_group(meta: &fs::Metadata) -> String {
    format!("xxx")
}