@@ -129,7 +129,7 @@ parse_page(Page page, XLogRecPtr *lsn)
129129 */
130130static int
131131read_page_from_file (pgFile * file , BlockNumber blknum ,
132- FILE * in , FILE * out , Page page )
132+ FILE * in , Page page )
133133{
134134 off_t offset = blknum * BLCKSZ ;
135135 size_t read_len = 0 ;
@@ -227,7 +227,7 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
227227{
228228 BackupPageHeader header ;
229229 Page page = malloc (BLCKSZ );
230- Page compressed_page ;
230+ Page compressed_page = NULL ;
231231 size_t write_buffer_size ;
232232 char write_buffer [BLCKSZ + sizeof (header )];
233233
@@ -245,7 +245,7 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
245245 while (!page_is_valid && try_again )
246246 {
247247 int result = read_page_from_file (file , blknum ,
248- in , out , page );
248+ in , page );
249249
250250 try_again -- ;
251251 /* This block was truncated.*/
@@ -275,13 +275,16 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
275275 /* This block was truncated.*/
276276 header .compressed_size = -1 ;
277277 }
278-
279- if ( page_size != BLCKSZ )
278+ else if ( page_size != BLCKSZ )
279+ {
280280 elog (ERROR , "File: %s, block %u, expected block size %lu,"
281281 "but read %d, try again" ,
282282 file -> path , absolute_blknum , page_size , BLCKSZ );
283-
284- ((PageHeader ) page )-> pd_checksum = pg_checksum_page (page , absolute_blknum );
283+ }
284+ else
285+ {
286+ ((PageHeader ) page )-> pd_checksum = pg_checksum_page (page , absolute_blknum );
287+ }
285288 }
286289
287290 if (header .compressed_size != -1 )
@@ -335,8 +338,10 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
335338
336339 file -> write_size += write_buffer_size ;
337340
338- free (page );
339- free (compressed_page );
341+ if (page != NULL )
342+ free (page );
343+ if (compressed_page != NULL )
344+ free (compressed_page );
340345}
341346
342347/*
@@ -563,25 +568,28 @@ restore_data_file(const char *from_root,
563568 if (header .block < blknum )
564569 elog (ERROR , "backup is broken at block %u" , blknum );
565570
566- //elog(VERBOSE, "file %s, header compressed size %d", file->path, header.compressed_size);
567- Assert (header .compressed_size <= BLCKSZ );
571+ if (header .compressed_size != -1 )
572+ {
573+ //elog(VERBOSE, "file %s, header compressed size %d", file->path, header.compressed_size);
574+ Assert (header .compressed_size <= BLCKSZ );
568575
569- read_len = fread (compressed_page .data , 1 ,
570- MAXALIGN (header .compressed_size ), in );
571- if (read_len != MAXALIGN (header .compressed_size ))
572- elog (ERROR , "cannot read block %u of \"%s\" read %lu of %d" ,
573- blknum , file -> path , read_len , header .compressed_size );
576+ read_len = fread (compressed_page .data , 1 ,
577+ MAXALIGN (header .compressed_size ), in );
578+ if (read_len != MAXALIGN (header .compressed_size ))
579+ elog (ERROR , "cannot read block %u of \"%s\" read %lu of %d" ,
580+ blknum , file -> path , read_len , header .compressed_size );
574581
575- if (header .compressed_size < BLCKSZ )
576- {
577- size_t uncompressed_size = 0 ;
582+ if (header .compressed_size != BLCKSZ )
583+ {
584+ size_t uncompressed_size = 0 ;
578585
579- uncompressed_size = do_decompress (page .data , BLCKSZ ,
580- compressed_page .data ,
581- header .compressed_size , file -> compress_alg );
586+ uncompressed_size = do_decompress (page .data , BLCKSZ ,
587+ compressed_page .data ,
588+ header .compressed_size , file -> compress_alg );
582589
583- if (uncompressed_size != BLCKSZ )
584- elog (ERROR , "page uncompressed to %ld bytes. != BLCKSZ" , uncompressed_size );
590+ if (uncompressed_size != BLCKSZ )
591+ elog (ERROR , "page uncompressed to %ld bytes. != BLCKSZ" , uncompressed_size );
592+ }
585593 }
586594
587595 /*
@@ -598,7 +606,7 @@ restore_data_file(const char *from_root,
598606 * Backup contains information that this block was truncated.
599607 * Truncate file to this length.
600608 */
601- ftruncate (out , blknum * BLCKSZ );
609+ ftruncate (fileno ( out ) , blknum * BLCKSZ );
602610 break ;
603611 }
604612 else if (header .compressed_size < BLCKSZ )
0 commit comments