Helpers extracted (replacing repeated inline patterns):
- write_line_delim(), write_pending_line_delim(), reset_item_line()
- line boundary code used by cut_bytes{,no_split}, cut_characters
- write_selected_item()
- output-delimiter + write logic used by all three byte/char functions
- reset_field_line()
- field line reset used by cut_fields_mb_any
Field functions unified via cut_fields_mb_any(stream, whitespace_mode):
- struct mbfield_parser encapsulates the whitespace vs.
fixed-delimiter state (saved char, mode flag)
- mbfield_get_char() - dispatches to saved-char or direct read
- mbfield_terminator()
- returns FIELD_{DATA,DELIMETER,LINE_DELIMITER} based on mode
- read_mb_field_to_buffer()
- replaces the two duplicated first-field buffering loops
- scan_mb_field(mbbuf, parser, pending, write_field)
- replaces the four duplicated field scan loops
(print+skip × two modes) with a single function and a write_field bool
- cut_fields_mb and cut_fields_ws are now trivial wrappers