From: Paul Eggert Date: Tue, 3 Aug 2004 04:43:38 +0000 (+0000) Subject: (record_buffer): New var. X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Ftar;a=commitdiff_plain;h=81460a034950f1b72de86a8ee12e6ed7b65f9707 (record_buffer): New var. (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. --- diff --git a/src/buffer.c b/src/buffer.c index 80bbe82..c1a88a3 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -40,6 +40,7 @@ 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! */ @@ -270,17 +271,12 @@ open_archive (enum access_mode wanted_access) save_name = 0; real_s_name = 0; + record_start = + page_aligned_alloc (&record_buffer, + (record_size + + (multi_volume_option ? 2 * BLOCKSIZE : 0))); if (multi_volume_option) - { - 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)); + record_start += 2; current_block = record_start; record_end = record_start + blocking_factor; @@ -946,7 +942,7 @@ close_archive (void) free (save_name); if (real_s_name) free (real_s_name); - free (multi_volume_option ? record_start - 2 : record_start); + free (record_buffer); } /* Called to initialize the global volume number. */