@ -70,14 +70,12 @@ typedef struct
{
CompressorState * cs ;
int hasSeek ;
pgoff_t filePos ;
pgoff_t dataStart ;
} lclContext ;
typedef struct
{
int dataState ;
pgoff_t dataPos ;
pgoff_t dataPos ; /* valid only if dataState=K_OFFSET_POS_SET */
} lclTocEntry ;
@ -144,8 +142,6 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
AH - > lo_buf_size = LOBBUFSIZE ;
AH - > lo_buf = ( void * ) pg_malloc ( LOBBUFSIZE ) ;
ctx - > filePos = 0 ;
/*
* Now open the file
*/
@ -185,7 +181,6 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
ReadHead ( AH ) ;
ReadToc ( AH ) ;
ctx - > dataStart = _getFilePos ( AH , ctx ) ;
}
}
@ -290,6 +285,7 @@ _StartData(ArchiveHandle *AH, TocEntry *te)
lclTocEntry * tctx = ( lclTocEntry * ) te - > formatData ;
tctx - > dataPos = _getFilePos ( AH , ctx ) ;
if ( tctx - > dataPos > = 0 )
tctx - > dataState = K_OFFSET_POS_SET ;
_WriteByte ( AH , BLK_DATA ) ; /* Block type */
@ -350,6 +346,7 @@ _StartBlobs(ArchiveHandle *AH, TocEntry *te)
lclTocEntry * tctx = ( lclTocEntry * ) te - > formatData ;
tctx - > dataPos = _getFilePos ( AH , ctx ) ;
if ( tctx - > dataPos > = 0 )
tctx - > dataState = K_OFFSET_POS_SET ;
_WriteByte ( AH , BLK_BLOBS ) ; /* Block type */
@ -551,7 +548,6 @@ _skipBlobs(ArchiveHandle *AH)
static void
_skipData ( ArchiveHandle * AH )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
size_t blkLen ;
char * buf = NULL ;
int buflen = 0 ;
@ -575,8 +571,6 @@ _skipData(ArchiveHandle *AH)
fatal ( " could not read from input file: %m " ) ;
}
ctx - > filePos + = blkLen ;
blkLen = ReadInt ( AH ) ;
}
@ -594,12 +588,10 @@ _skipData(ArchiveHandle *AH)
static int
_WriteByte ( ArchiveHandle * AH , const int i )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
int res ;
if ( ( res = fputc ( i , AH - > FH ) ) = = EOF )
WRITE_ERROR_EXIT ;
ctx - > filePos + = 1 ;
return 1 ;
}
@ -615,13 +607,11 @@ _WriteByte(ArchiveHandle *AH, const int i)
static int
_ReadByte ( ArchiveHandle * AH )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
int res ;
res = getc ( AH - > FH ) ;
if ( res = = EOF )
READ_ERROR_EXIT ( AH - > FH ) ;
ctx - > filePos + = 1 ;
return res ;
}
@ -635,11 +625,8 @@ _ReadByte(ArchiveHandle *AH)
static void
_WriteBuf ( ArchiveHandle * AH , const void * buf , size_t len )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
if ( fwrite ( buf , 1 , len , AH - > FH ) ! = len )
WRITE_ERROR_EXIT ;
ctx - > filePos + = len ;
}
/*
@ -652,11 +639,8 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
static void
_ReadBuf ( ArchiveHandle * AH , void * buf , size_t len )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
if ( fread ( buf , 1 , len , AH - > FH ) ! = len )
READ_ERROR_EXIT ( AH - > FH ) ;
ctx - > filePos + = len ;
}
/*
@ -688,7 +672,6 @@ _CloseArchive(ArchiveHandle *AH)
if ( tpos < 0 & & ctx - > hasSeek )
fatal ( " could not determine seek position in archive file: %m " ) ;
WriteToc ( AH ) ;
ctx - > dataStart = _getFilePos ( AH , ctx ) ;
WriteDataChunks ( AH , NULL ) ;
/*
@ -862,30 +845,24 @@ _WorkerJobRestoreCustom(ArchiveHandle *AH, TocEntry *te)
/*
* Get the current position in the archive file .
*
* With a non - seekable archive file , we may not be able to obtain the
* file position . If so , just return - 1. It ' s not too important in
* that case because we won ' t be able to rewrite the TOC to fill in
* data block offsets anyway .
*/
static pgoff_t
_getFilePos ( ArchiveHandle * AH , lclContext * ctx )
{
pgoff_t pos ;
if ( ctx - > hasSeek )
{
/*
* Prior to 1.7 ( pg7 .3 ) we relied on the internally maintained
* pointer . Now we rely on ftello ( ) always , unless the file has been
* found to not support it . For debugging purposes , print a warning
* if the internal pointer disagrees , so that we ' re more likely to
* notice if something ' s broken about the internal position tracking .
*/
pos = ftello ( AH - > FH ) ;
if ( pos < 0 )
{
/* Not expected if we found we can seek. */
if ( ctx - > hasSeek )
fatal ( " could not determine seek position in archive file: %m " ) ;
if ( pos ! = ctx - > filePos )
pg_log_warning ( " ftell mismatch with expected position -- ftell used " ) ;
}
else
pos = ctx - > filePos ;
return pos ;
}
@ -897,7 +874,6 @@ _getFilePos(ArchiveHandle *AH, lclContext *ctx)
static void
_readBlockHeader ( ArchiveHandle * AH , int * type , int * id )
{
lclContext * ctx = ( lclContext * ) AH - > formatData ;
int byt ;
/*
@ -918,7 +894,6 @@ _readBlockHeader(ArchiveHandle *AH, int *type, int *id)
* id = 0 ; /* don't return an uninitialized value */
return ;
}
ctx - > filePos + = 1 ;
}
* id = ReadInt ( AH ) ;