Skip to content

Commit 1d794e1

Browse files
authored
Merge pull request #2752 from Smicry/master
tail use UResult
2 parents 4d33a3a + 81a1fde commit 1d794e1

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/uu/tail/src/tail.rs

+13-18
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ fn uu_tail(settings: &Settings) -> UResult<()> {
191191

192192
if use_stdin {
193193
let mut reader = BufReader::new(stdin());
194-
unbounded_tail(&mut reader, settings);
194+
unbounded_tail(&mut reader, settings)?;
195195

196196
// Don't follow stdin since there are no checks for pipes/FIFOs
197197
//
@@ -230,7 +230,7 @@ fn uu_tail(settings: &Settings) -> UResult<()> {
230230
}
231231
} else {
232232
let mut reader = BufReader::new(file);
233-
unbounded_tail(&mut reader, settings);
233+
unbounded_tail(&mut reader, settings)?;
234234
if settings.follow {
235235
readers.push((Box::new(reader), filename));
236236
}
@@ -239,7 +239,7 @@ fn uu_tail(settings: &Settings) -> UResult<()> {
239239
}
240240

241241
if settings.follow {
242-
follow(&mut readers[..], settings);
242+
follow(&mut readers[..], settings)?;
243243
}
244244

245245
Ok(())
@@ -342,10 +342,9 @@ pub fn uu_app() -> App<'static, 'static> {
342342
)
343343
}
344344

345-
fn follow<T: BufRead>(readers: &mut [(T, &String)], settings: &Settings) {
346-
assert!(settings.follow);
347-
if readers.is_empty() {
348-
return;
345+
fn follow<T: BufRead>(readers: &mut [(T, &String)], settings: &Settings) -> UResult<()> {
346+
if readers.is_empty() || !settings.follow {
347+
return Ok(());
349348
}
350349

351350
let mut last = readers.len() - 1;
@@ -372,7 +371,7 @@ fn follow<T: BufRead>(readers: &mut [(T, &String)], settings: &Settings) {
372371
}
373372
print!("{}", datum);
374373
}
375-
Err(err) => panic!("{}", err),
374+
Err(err) => return Err(USimpleError::new(1, err.to_string())),
376375
}
377376
}
378377
}
@@ -381,6 +380,7 @@ fn follow<T: BufRead>(readers: &mut [(T, &String)], settings: &Settings) {
381380
break;
382381
}
383382
}
383+
Ok(())
384384
}
385385

386386
/// Iterate over bytes in the file, in reverse, until we find the
@@ -475,7 +475,7 @@ where
475475
}
476476
}
477477

478-
fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) {
478+
fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UResult<()> {
479479
// Read through each line/char and store them in a ringbuffer that always
480480
// contains count lines/chars. When reaching the end of file, output the
481481
// data in the ringbuf.
@@ -487,11 +487,13 @@ fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) {
487487
}
488488
FilterMode::Bytes(count) => {
489489
for byte in unbounded_tail_collect(reader.bytes(), count, settings.beginning) {
490-
let mut stdout = stdout();
491-
print_byte(&mut stdout, byte);
490+
if let Err(err) = stdout().write(&[byte]) {
491+
return Err(USimpleError::new(1, err.to_string()));
492+
}
492493
}
493494
}
494495
}
496+
Ok(())
495497
}
496498

497499
fn is_seekable<T: Seek>(file: &mut T) -> bool {
@@ -500,13 +502,6 @@ fn is_seekable<T: Seek>(file: &mut T) -> bool {
500502
&& file.seek(SeekFrom::Start(0)).is_ok()
501503
}
502504

503-
#[inline]
504-
fn print_byte<T: Write>(stdout: &mut T, ch: u8) {
505-
if let Err(err) = stdout.write(&[ch]) {
506-
crash!(1, "{}", err);
507-
}
508-
}
509-
510505
fn parse_num(src: &str) -> Result<(usize, bool), ParseSizeError> {
511506
let mut size_string = src.trim();
512507
let mut starting_with = false;

0 commit comments

Comments
 (0)