1
0
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:
Jim Meyering
2001-03-03 18:53:44 +00:00
parent f10bbe70a9
commit cac9a29ad8

View File

@@ -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;
}