From: Pádraig Brady
Date: Sat, 28 Mar 2026 09:34:33 +0000 (+0000) Subject: cut: support no delimiter match fast path with -s X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5d339d583de4ee5906198538b225a1e0f0068c2e;p=thirdparty%2Fcoreutils.git cut: support no delimiter match fast path with -s * src/cut.c (cut_fields_bytesearch): Just skip the data with -s. --- diff --git a/src/cut.c b/src/cut.c index 2d86da9117..01343f81d2 100644 --- a/src/cut.c +++ b/src/cut.c @@ -1045,9 +1045,9 @@ cut_fields_bytesearch (FILE *stream) char *chunk = mbbuf.buffer + mbbuf.offset; idx_t processed = 0; - /* Fast path: no delimiter in chunk â output lines directly. */ + /* Fast path: no field delimiter in chunk â output or skip lines. */ if (field_idx == 1 - && !suppress_non_delimited && !whitespace_delimited + && !whitespace_delimited && !field_delim_is_line_delim () && !find_bytesearch_field_delim (chunk, safe)) { @@ -1056,17 +1056,22 @@ cut_fields_bytesearch (FILE *stream) : memrchr ((void *) chunk, line_delim, safe); if (last_line_delim) { - /* Flush any buffered field 1 data from a prior - partial chunk that had no delimiter. */ - if (field_1_n_bytes > 0) + idx_t n = last_line_delim - chunk + 1; + if (! suppress_non_delimited) { - write_bytes (field_1_buffer, field_1_n_bytes); - field_1_n_bytes = 0; + /* Flush any buffered field 1 data from a prior + partial chunk that had no delimiter. */ + if (field_1_n_bytes > 0) + { + write_bytes (field_1_buffer, field_1_n_bytes); + field_1_n_bytes = 0; + } + write_bytes (chunk, n); + if (search.at_eof && chunk[n - 1] != line_delim) + write_line_delim (); } - idx_t n = last_line_delim - chunk + 1; - write_bytes (chunk, n); - if (search.at_eof && chunk[n - 1] != line_delim) - write_line_delim (); + else + field_1_n_bytes = 0; mbbuf_advance (&mbbuf, n); have_pending_line = false; if (search.at_eof)