Fix tail panicing when seeking backwards

Previously `tail -c n file.txt` caused panic if n > sizeof file.txt.
Now it prints out whole file similarly to GNU tail.
This commit is contained in:
Tavo Annus 2022-08-23 21:15:39 +03:00
parent bbd0ef9f1b
commit 09cfa44560
2 changed files with 23 additions and 1 deletions

View file

@ -1411,7 +1411,9 @@ fn bounded_tail(file: &mut File, settings: &Settings) {
file.seek(SeekFrom::Start(i as u64)).unwrap();
}
(FilterMode::Bytes(count), false) => {
file.seek(SeekFrom::End(-(*count as i64))).unwrap();
let len = file.seek(SeekFrom::End(0)).unwrap();
file.seek(SeekFrom::End(-((*count).min(len) as i64)))
.unwrap();
}
(FilterMode::Bytes(count), true) => {
// GNU `tail` seems to index bytes and lines starting at 1, not

View file

@ -2435,3 +2435,23 @@ fn test_illegal_seek() {
);
assert_eq!(p.wait().unwrap().code().unwrap(), 1);
}
#[test]
fn test_seek_bytes_backward_outside_file() {
new_ucmd!()
.arg("-c")
.arg("100")
.arg(FOOBAR_TXT)
.run()
.stdout_is_fixture(FOOBAR_TXT);
}
#[test]
fn test_seek_bytes_forward_outside_file() {
new_ucmd!()
.arg("-c")
.arg("+100")
.arg(FOOBAR_TXT)
.run()
.stdout_is("");
}