mirror of
https://github.com/uutils/coreutils.git
synced 2025-12-23 08:47:37 +00:00
sort: do not search previously-read characters for newlines
This commit is contained in:
parent
b6f4243fa7
commit
72b70a9387
1 changed files with 13 additions and 7 deletions
|
|
@ -260,6 +260,8 @@ fn read_to_buffer<T: Read>(
|
|||
) -> UResult<(usize, bool)> {
|
||||
let mut read_target = &mut buffer[start_offset..];
|
||||
let mut last_file_empty = true;
|
||||
let mut newline_search_offset = 0;
|
||||
let mut found_newline = false;
|
||||
loop {
|
||||
match file.read(read_target) {
|
||||
Ok(0) => {
|
||||
|
|
@ -278,13 +280,17 @@ fn read_to_buffer<T: Read>(
|
|||
continue;
|
||||
}
|
||||
}
|
||||
let mut sep_iter = memchr_iter(separator, buffer).rev();
|
||||
let last_line_end = sep_iter.next();
|
||||
if sep_iter.next().is_some() {
|
||||
// We read enough lines.
|
||||
let end = last_line_end.unwrap();
|
||||
// We want to include the separator here, because it shouldn't be carried over.
|
||||
return Ok((end + 1, true));
|
||||
|
||||
let mut sep_iter =
|
||||
memchr_iter(separator, &buffer[newline_search_offset..buffer.len()]).rev();
|
||||
newline_search_offset = buffer.len();
|
||||
if let Some(last_line_end) = sep_iter.next() {
|
||||
if found_newline || sep_iter.next().is_some() {
|
||||
// We read enough lines.
|
||||
// We want to include the separator here, because it shouldn't be carried over.
|
||||
return Ok((last_line_end + 1, true));
|
||||
}
|
||||
found_newline = true;
|
||||
}
|
||||
|
||||
// We need to read more lines
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue