Fix for broken pipe panic

This commit is contained in:
Matthias Beyer 2018-02-14 23:30:09 +01:00
parent 427ad89e55
commit 09da5cc21e

View file

@ -40,11 +40,15 @@ extern crate libimagstore;
#[macro_use] extern crate libimagrt; #[macro_use] extern crate libimagrt;
extern crate libimagerror; extern crate libimagerror;
use std::io::Write;
use regex::Regex; use regex::Regex;
use libimagrt::setup::generate_runtime_setup; use libimagrt::setup::generate_runtime_setup;
use libimagstore::store::Entry; use libimagstore::store::Entry;
use libimagerror::trace::MapErrTrace; use libimagerror::trace::MapErrTrace;
use libimagerror::exit::ExitUnwrap;
use libimagerror::io::ToExitCode;
mod ui; mod ui;
@ -87,32 +91,38 @@ fn main() {
.map(|entry| show(&entry, &pattern, &opts, &mut count)) .map(|entry| show(&entry, &pattern, &opts, &mut count))
.count(); .count();
let mut out = ::std::io::stdout();
if opts.count { if opts.count {
println!("{}", count); let _ = writeln!(out, "{}", count).to_exit_code().unwrap_or_exit();
} else if !opts.files_with_matches { } else if !opts.files_with_matches {
println!("Processed {} files, {} matches, {} nonmatches", let _ = writeln!(out, "Processed {} files, {} matches, {} nonmatches",
overall_count, overall_count,
count, count,
overall_count - count); overall_count - count)
.to_exit_code()
.unwrap_or_exit();
} }
} }
fn show(e: &Entry, re: &Regex, opts: &Options, count: &mut usize) { fn show(e: &Entry, re: &Regex, opts: &Options, count: &mut usize) {
let mut out = ::std::io::stdout();
if opts.files_with_matches { if opts.files_with_matches {
println!("{}", e.get_location()); let _ = writeln!(out, "{}", e.get_location()).to_exit_code().unwrap_or_exit();
} else if opts.count { } else if opts.count {
*count += 1; *count += 1;
} else { } else {
println!("{}:", e.get_location()); let _ = writeln!(out, "{}:", e.get_location()).to_exit_code().unwrap_or_exit();
for capture in re.captures_iter(e.get_content()) { for capture in re.captures_iter(e.get_content()) {
for mtch in capture.iter() { for mtch in capture.iter() {
if let Some(m) = mtch { if let Some(m) = mtch {
println!(" '{}'", m.as_str()); let _ = writeln!(out, " '{}'", m.as_str()).to_exit_code().unwrap_or_exit();
} }
} }
} }
println!(""); let _ = writeln!(out, "").to_exit_code().unwrap_or_exit();
} }
} }