bulk 0.4.9

A simple tool for making deb packages, repositories, and update version numbers.
use std::io::{self, Read};
use std::fs::File;
use std::path::Path;

use sha2::sha2::Sha256;
use sha2::digest::Digest;


pub fn hash_stream<D: Digest, R: Read>(hash: &mut D, reader: &mut R)
    -> Result<(), io::Error>
{
    let mut buf = [0u8; 8*1024];
    loop {
        let len = match reader.read(&mut buf[..]) {
            Ok(0) => break,
            Ok(len) => len,
            Err(ref e) if e.kind() == io::ErrorKind::Interrupted => continue,
            Err(e) => return Err(e),
        };
        hash.input(&buf[..len]);
    }
    Ok(())
}

pub fn hash_file<F: AsRef<Path>>(filename: F) -> io::Result<String> {
    let mut sha256 = Sha256::new();
    let mut file = try!(File::open(filename.as_ref()));
    try!(hash_stream(&mut sha256, &mut file));
    return Ok(sha256.result_str());
}