From 4d76163e6e7e25acadc320e77b2226a7c42ea5df Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 7 Oct 2018 13:21:50 +0300 Subject: Refactor: how sha256 of a file is computed (simpler code) --- src/format.rs | 46 +++++++++++++++++++++++----------------------- 1 file 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 { + 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)) } -- cgit v1.2.1