summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/format.rs46
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))
}