diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-10-07 13:21:50 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-10-07 13:21:50 +0300 |
commit | 4d76163e6e7e25acadc320e77b2226a7c42ea5df (patch) | |
tree | db30f910686d45f297c9b08f0576236685710ffc /src | |
parent | 34882b6ce800e0b33dab841ec609000a32d28356 (diff) | |
download | summainrs-4d76163e6e7e25acadc320e77b2226a7c42ea5df.tar.gz |
Diffstat (limited to 'src')
-rw-r--r-- | src/format.rs | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/format.rs b/src/format.rs index 3ba85b9..a45eea9 100644 --- a/src/format.rs +++ b/src/format.rs @@ -5,6 +5,7 @@ use std::io; use std::fs; use std::os::unix::fs::PermissionsExt; use std::os::linux::fs::MetadataExt; +use std::path::Path; use std::io::prelude::*; use walkdir::DirEntry; @@ -101,30 +102,29 @@ pub fn group(e: &DirEntry) -> serde_yaml::Value { pub fn sha256(e: &DirEntry) -> serde_yaml::Value { - let mut ok = true; - let mut hasher = Hasher::new(Algorithm::SHA256); - if let Ok(file) = fs::File::open(e.path()) { - let mut reader = io::BufReader::new(file); - let mut buf = [0; 1024 * 1024]; - let mut done = false; - while ok && !done{ - if let Ok(n) = reader.read(&mut buf) { - if n == 0 { - done = true; - } else if let Err(_) = hasher.write(&buf[0..n]) { - ok = false; - } - } else { - ok = false; - } - } + if let Ok(digest) = sha256_file(e.path()) { + str_value(&digest) } else { - ok = false; + str_value("error reading file") } - if ok { - let digest = hasher.finish(); - str_value(&hex::encode(digest)) - } else { - str_value("can't read file") +} + + +fn sha256_file(filename: &Path) -> io::Result<String> { + let file = fs::File::open(filename)?; + let mut reader = io::BufReader::new(file); + let mut hasher = Hasher::new(Algorithm::SHA256); + let mut buf = [0; 1024 * 1024]; + let mut done = false; + while !done { + let n = reader.read(&mut buf)?; + if n == 0 { + done = true; + } else { + hasher.write(&buf[0..n])?; + } } + + let digest = hasher.finish(); + Ok(hex::encode(digest)) } |