(open_archive): Don't use valloc; on older or buggy hosts, you can't
free the result. Use page_aligned_alloc instead.
Record the pointer to be freed into record_buffer.
(close_archive): Free record_buffer.
static tarlong prev_written; /* bytes written on previous volumes */
static tarlong bytes_written; /* bytes written on this volume */
static tarlong prev_written; /* bytes written on previous volumes */
static tarlong bytes_written; /* bytes written on this volume */
+static void *record_buffer; /* allocated memory */
/* FIXME: The following variables should ideally be static to this
module. However, this cannot be done yet. The cleanup continues! */
/* FIXME: The following variables should ideally be static to this
module. However, this cannot be done yet. The cleanup continues! */
save_name = 0;
real_s_name = 0;
save_name = 0;
real_s_name = 0;
+ record_start =
+ page_aligned_alloc (&record_buffer,
+ (record_size
+ + (multi_volume_option ? 2 * BLOCKSIZE : 0)));
- {
- record_start = valloc (record_size + (2 * BLOCKSIZE));
- if (record_start)
- record_start += 2;
- }
- else
- record_start = valloc (record_size);
- if (!record_start)
- FATAL_ERROR ((0, 0, _("Cannot allocate memory for blocking factor %d"),
- blocking_factor));
current_block = record_start;
record_end = record_start + blocking_factor;
current_block = record_start;
record_end = record_start + blocking_factor;
free (save_name);
if (real_s_name)
free (real_s_name);
free (save_name);
if (real_s_name)
free (real_s_name);
- free (multi_volume_option ? record_start - 2 : record_start);
}
/* Called to initialize the global volume number. */
}
/* Called to initialize the global volume number. */