@@ -129,7 +129,7 @@ parse_page(Page page, XLogRecPtr *lsn)
129
129
*/
130
130
static int
131
131
read_page_from_file (pgFile * file , BlockNumber blknum ,
132
- FILE * in , FILE * out , Page page )
132
+ FILE * in , Page page )
133
133
{
134
134
off_t offset = blknum * BLCKSZ ;
135
135
size_t read_len = 0 ;
@@ -227,7 +227,7 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
227
227
{
228
228
BackupPageHeader header ;
229
229
Page page = malloc (BLCKSZ );
230
- Page compressed_page ;
230
+ Page compressed_page = NULL ;
231
231
size_t write_buffer_size ;
232
232
char write_buffer [BLCKSZ + sizeof (header )];
233
233
@@ -245,7 +245,7 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
245
245
while (!page_is_valid && try_again )
246
246
{
247
247
int result = read_page_from_file (file , blknum ,
248
- in , out , page );
248
+ in , page );
249
249
250
250
try_again -- ;
251
251
/* This block was truncated.*/
@@ -275,13 +275,16 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
275
275
/* This block was truncated.*/
276
276
header .compressed_size = -1 ;
277
277
}
278
-
279
- if ( page_size != BLCKSZ )
278
+ else if ( page_size != BLCKSZ )
279
+ {
280
280
elog (ERROR , "File: %s, block %u, expected block size %lu,"
281
281
"but read %d, try again" ,
282
282
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
+ }
285
288
}
286
289
287
290
if (header .compressed_size != -1 )
@@ -335,8 +338,10 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
335
338
336
339
file -> write_size += write_buffer_size ;
337
340
338
- free (page );
339
- free (compressed_page );
341
+ if (page != NULL )
342
+ free (page );
343
+ if (compressed_page != NULL )
344
+ free (compressed_page );
340
345
}
341
346
342
347
/*
@@ -563,25 +568,28 @@ restore_data_file(const char *from_root,
563
568
if (header .block < blknum )
564
569
elog (ERROR , "backup is broken at block %u" , blknum );
565
570
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 );
568
575
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 );
574
581
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 ;
578
585
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 );
582
589
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
+ }
585
593
}
586
594
587
595
/*
@@ -598,7 +606,7 @@ restore_data_file(const char *from_root,
598
606
* Backup contains information that this block was truncated.
599
607
* Truncate file to this length.
600
608
*/
601
- ftruncate (out , blknum * BLCKSZ );
609
+ ftruncate (fileno ( out ) , blknum * BLCKSZ );
602
610
break ;
603
611
}
604
612
else if (header .compressed_size < BLCKSZ )
0 commit comments