1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

tac: handle no line separators in file

Change the behavior of `tac` when there are no line separators in the
input. Previously, it was appending an extra line separator; this commit
prevents that from happening. The input is now writted directly to
stdout.
This commit is contained in:
Jeffrey Finkelstein 2021-07-25 15:19:29 -04:00
parent c98e7f5de9
commit 2648f330e4
2 changed files with 13 additions and 1 deletions

View file

@ -139,9 +139,16 @@ fn tac(filenames: Vec<String>, before: bool, _: bool, separator: &str) -> i32 {
i += 1; i += 1;
} }
} }
// If the file contains no line separators, then simply write
// the contents of the file directly to stdout.
if offsets.is_empty() {
out.write_all(&data)
.unwrap_or_else(|e| crash!(1, "failed to write to stdout: {}", e));
return exit_code;
}
// if there isn't a separator at the end of the file, fake it // if there isn't a separator at the end of the file, fake it
if offsets.is_empty() || *offsets.last().unwrap() < data.len() - slen { if *offsets.last().unwrap() < data.len() - slen {
offsets.push(data.len()); offsets.push(data.len());
} }

View file

@ -68,3 +68,8 @@ fn test_invalid_input() {
.fails() .fails()
.stderr_contains("dir: read error: Invalid argument"); .stderr_contains("dir: read error: Invalid argument");
} }
#[test]
fn test_no_line_separators() {
new_ucmd!().pipe_in("a").succeeds().stdout_is("a");
}