irrespective of which kernel version coreutils is built against,
reinstating that behaviour from coreutils-9.0.
- od and uniq will now exit immediately upon receiving a write error, which is
- significant when reading large / unbounded inputs.
+ cut, od, and uniq will now exit immediately upon receiving a write error,
+ which is significant when reading large / unbounded inputs.
split now uses more tuned access patterns for its potentially large input.
This was seen to improve throughput by 5% when reading from SSD.
if (c == line_delim)
{
- putchar (c);
+ if (putchar (c) < 0)
+ write_error ();
byte_idx = 0;
print_delimiter = false;
current_rp = frp;
{
if (print_delimiter && is_range_start_index (byte_idx))
{
- fwrite (output_delimiter_string, sizeof (char),
- output_delimiter_length, stdout);
+ if (fwrite (output_delimiter_string, sizeof (char),
+ output_delimiter_length, stdout)
+ != output_delimiter_length)
+ write_error ();
}
print_delimiter = true;
}
- putchar (c);
+ if (putchar (c) < 0)
+ write_error ();
}
}
}
}
else
{
- fwrite (field_1_buffer, sizeof (char), n_bytes, stdout);
+ if (fwrite (field_1_buffer, sizeof (char), n_bytes, stdout)
+ != n_bytes)
+ write_error ();
/* Make sure the output line is newline terminated. */
if (field_1_buffer[n_bytes - 1] != line_delim)
putchar (line_delim);
if (print_kth (1))
{
/* Print the field, but not the trailing delimiter. */
- fwrite (field_1_buffer, sizeof (char), n_bytes - 1, stdout);
+ if (fwrite (field_1_buffer, sizeof (char), n_bytes - 1, stdout)
+ != n_bytes - 1)
+ write_error ();
/* With -d$'\n' don't treat the last '\n' as a delimiter. */
if (delim == line_delim)
{
if (found_any_selected_field)
{
- fwrite (output_delimiter_string, sizeof (char),
- output_delimiter_length, stdout);
+ if (fwrite (output_delimiter_string, sizeof (char),
+ output_delimiter_length, stdout)
+ != output_delimiter_length)
+ write_error ();
}
found_any_selected_field = true;
while ((c = getc (stream)) != delim && c != line_delim && c != EOF)
{
- putchar (c);
+ if (putchar (c) < 0)
+ write_error ();
prev_c = c;
}
}
{
if (c == line_delim || prev_c != line_delim
|| delim == line_delim)
- putchar (line_delim);
+ if (putchar (line_delim) < 0)
+ write_error ();
}
if (c == EOF)
break;