1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-07-26 10:39:01 +02:00

cut: avoid a redundant heap allocation

* src/cut.c (set_fields): Don't allocate memory for
`printable_field' if there are no finite ranges.
This is achieved by keeping max_range_endpoint as 0 when
there are no finite ranges.  max_range_endpoint is then
used throughout the code to guard against allocation of,
and access to the bit array.
The extra allocation was introduced via commit v8.10-3-g2e636af.
This commit is contained in:
Cojocaru Alexandru
2012-12-06 03:03:41 +01:00
committed by Pádraig Brady
parent 00743a1f6e
commit ec48beadfa
+4 -4
View File
@@ -500,14 +500,13 @@ set_fields (const char *fieldstr)
if (rp[i].hi > max_range_endpoint)
max_range_endpoint = rp[i].hi;
}
if (max_range_endpoint < eol_range_start)
max_range_endpoint = eol_range_start;
/* Allocate an array large enough so that it may be indexed by
the field numbers corresponding to all finite ranges
(i.e. '2-6' or '-4', but not '5-') in FIELDSTR. */
printable_field = xzalloc (max_range_endpoint / CHAR_BIT + 1);
if (max_range_endpoint)
printable_field = xzalloc (max_range_endpoint / CHAR_BIT + 1);
qsort (rp, n_rp, sizeof (rp[0]), compare_ranges);
@@ -531,7 +530,8 @@ set_fields (const char *fieldstr)
if (output_delimiter_specified
&& !complement
&& eol_range_start && !is_printable_field (eol_range_start))
&& eol_range_start
&& max_range_endpoint && !is_printable_field (eol_range_start))
mark_range_start (eol_range_start);
free (rp);