From 3f06adfcbca46613892a089dd2262397bcbd62f7 Mon Sep 17 00:00:00 2001 From: Arcterus Date: Mon, 23 Jun 2014 09:53:28 -0700 Subject: [PATCH] seq: fix broken pipe on Busybox test --- seq/seq.rs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/seq/seq.rs b/seq/seq.rs index d9266980a..6c9554918 100644 --- a/seq/seq.rs +++ b/seq/seq.rs @@ -9,6 +9,7 @@ extern crate getopts; extern crate libc; use std::cmp; +use std::io; use std::os; #[path = "../common/util.rs"] @@ -16,6 +17,20 @@ mod util; static NAME: &'static str = "seq"; +macro_rules! pipe_write( + ($($args:expr),+) => ( + match write!(&mut io::stdout() as &mut Writer, $($args),+) { + Ok(_) => {} + Err(f) => + if f.kind == io::BrokenPipe { + return + } else { + fail!("{}", f.to_str()) + } + } + ) +) + #[deriving(Clone)] struct SeqOptions { separator: String, @@ -226,27 +241,27 @@ fn print_seq(first: f64, step: f64, last: f64, largest_dec: uint, separator: Str let before_dec = istr.as_slice().find('.').unwrap_or(ilen); if pad && before_dec < padding { for _ in range(0, padding - before_dec) { - print!("0"); + pipe_write!("0"); } } - print!("{}", istr); + pipe_write!("{}", istr); let mut idec = ilen - before_dec; if idec < largest_dec { if idec == 0 { - print!("."); + pipe_write!("."); idec += 1; } for _ in range(idec, largest_dec) { - print!("0") + pipe_write!("0") } } i += 1; value = first + i as f64 * step; if !done_printing(value, step, last) { - print!("{:s}", separator); + pipe_write!("{:s}", separator); } } if (first >= last && step < 0f64) || (first <= last && step > 0f64) { - print!("{:s}", terminator); + pipe_write!("{:s}", terminator); } }