mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-20 18:56:39 +02:00
(initbuf): If the desired size cannot be
allocated, repeatedly halve it until allocation succeeds.
This commit is contained in:
17
src/sort.c
17
src/sort.c
@@ -698,12 +698,23 @@ sort_buffer_size (FILE *const *fps, int nfps,
|
||||
static void
|
||||
initbuf (struct buffer *buf, size_t line_bytes, size_t alloc)
|
||||
{
|
||||
/* Ensure that the line array is properly aligned. */
|
||||
alloc += sizeof (struct line) - alloc % sizeof (struct line);
|
||||
/* Ensure that the line array is properly aligned. If the desired
|
||||
size cannot be allocated, repeatedly halve it until allocation
|
||||
succeeds. The smaller allocation may hurt overall performance,
|
||||
but that's better than failing. */
|
||||
for (;;)
|
||||
{
|
||||
alloc += sizeof (struct line) - alloc % sizeof (struct line);
|
||||
buf->buf = malloc (alloc);
|
||||
if (buf->buf)
|
||||
break;
|
||||
alloc /= 2;
|
||||
if (alloc <= line_bytes + 1)
|
||||
xalloc_die ();
|
||||
}
|
||||
|
||||
buf->line_bytes = line_bytes;
|
||||
buf->alloc = alloc;
|
||||
buf->buf = xmalloc (buf->alloc);
|
||||
buf->used = buf->left = buf->nlines = 0;
|
||||
buf->eof = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user