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

Merge pull request #3278 from jfinkels/split-line-bytes-empty-file

split: avoid writing final empty chunk with -C
This commit is contained in:
Sylvestre Ledru 2022-03-20 17:41:26 +01:00 committed by GitHub
commit b55da29c53
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 6 deletions

View file

@ -858,6 +858,11 @@ impl<'a> Write for LineBytesChunkWriter<'a> {
// Loop until we have written all bytes in the input buffer
// (or an IO error occurs).
loop {
// If the buffer is empty, then we are done writing.
if buf.is_empty() {
return Ok(total_bytes_written);
}
// If we have filled the current chunk with bytes, then
// start a new chunk and initialize its corresponding
// writer.
@ -875,12 +880,6 @@ impl<'a> Write for LineBytesChunkWriter<'a> {
// Find the first newline character in the buffer.
match memchr::memchr(b'\n', buf) {
// If there is no newline character and the buffer is
// empty, then we are done writing.
None if buf.is_empty() => {
return Ok(total_bytes_written);
}
// If there is no newline character and the buffer is
// not empty, then write as many bytes as we can and
// then move on to the next chunk if necessary.

View file

@ -634,3 +634,24 @@ fn test_line_bytes_no_final_newline() {
assert_eq!(at.read("xae"), "3\n");
assert_eq!(at.read("xaf"), "4");
}
#[test]
fn test_line_bytes_no_empty_file() {
let (at, mut ucmd) = at_and_ucmd!();
ucmd.args(&["-C", "1"])
.pipe_in("1\n2222\n3\n4")
.succeeds()
.no_stdout()
.no_stderr();
assert_eq!(at.read("xaa"), "1");
assert_eq!(at.read("xab"), "\n");
assert_eq!(at.read("xac"), "2");
assert_eq!(at.read("xad"), "2");
assert_eq!(at.read("xae"), "2");
assert_eq!(at.read("xaf"), "2");
assert_eq!(at.read("xag"), "\n");
assert_eq!(at.read("xah"), "3");
assert_eq!(at.read("xai"), "\n");
assert_eq!(at.read("xaj"), "4");
assert!(!at.plus("xak").exists());
}