aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_backup_tar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_backup_tar.c')
-rw-r--r--src/bin/pg_dump/pg_backup_tar.c860
1 files changed, 474 insertions, 386 deletions
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index 76d1e6c743d..9dbf862fc4b 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -8,23 +8,23 @@
* See the headers to pg_backup_files & pg_restore for more details.
*
* Copyright (c) 2000, Philip Warner
- * Rights are granted to use this software in any way so long
- * as this notice is not removed.
+ * Rights are granted to use this software in any way so long
+ * as this notice is not removed.
*
* The author is not responsible for loss or damages that may
* result from it's use.
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.11 2001/03/19 02:35:28 pjw Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.12 2001/03/22 04:00:13 momjian Exp $
*
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
*
- * Initial version.
+ * Initial version.
*
* Modifications - 04-Jan-2001 - pjw@rhyme.com.au
*
- * - Check results of IO routines more carefully.
+ * - Check results of IO routines more carefully.
*
*-------------------------------------------------------------------------
*/
@@ -38,270 +38,302 @@
#include <ctype.h>
#include <unistd.h>
-static void _ArchiveEntry(ArchiveHandle* AH, TocEntry* te);
-static void _StartData(ArchiveHandle* AH, TocEntry* te);
-static int _WriteData(ArchiveHandle* AH, const void* data, int dLen);
-static void _EndData(ArchiveHandle* AH, TocEntry* te);
-static int _WriteByte(ArchiveHandle* AH, const int i);
-static int _ReadByte(ArchiveHandle* );
-static int _WriteBuf(ArchiveHandle* AH, const void* buf, int len);
-static int _ReadBuf(ArchiveHandle* AH, void* buf, int len);
-static void _CloseArchive(ArchiveHandle* AH);
-static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt);
-static void _WriteExtraToc(ArchiveHandle* AH, TocEntry* te);
-static void _ReadExtraToc(ArchiveHandle* AH, TocEntry* te);
-static void _PrintExtraToc(ArchiveHandle* AH, TocEntry* te);
-
-static void _StartBlobs(ArchiveHandle* AH, TocEntry* te);
-static void _StartBlob(ArchiveHandle* AH, TocEntry* te, int oid);
-static void _EndBlob(ArchiveHandle* AH, TocEntry* te, int oid);
-static void _EndBlobs(ArchiveHandle* AH, TocEntry* te);
+static void _ArchiveEntry(ArchiveHandle *AH, TocEntry *te);
+static void _StartData(ArchiveHandle *AH, TocEntry *te);
+static int _WriteData(ArchiveHandle *AH, const void *data, int dLen);
+static void _EndData(ArchiveHandle *AH, TocEntry *te);
+static int _WriteByte(ArchiveHandle *AH, const int i);
+static int _ReadByte(ArchiveHandle *);
+static int _WriteBuf(ArchiveHandle *AH, const void *buf, int len);
+static int _ReadBuf(ArchiveHandle *AH, void *buf, int len);
+static void _CloseArchive(ArchiveHandle *AH);
+static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
+static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
+static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
+static void _PrintExtraToc(ArchiveHandle *AH, TocEntry *te);
+
+static void _StartBlobs(ArchiveHandle *AH, TocEntry *te);
+static void _StartBlob(ArchiveHandle *AH, TocEntry *te, int oid);
+static void _EndBlob(ArchiveHandle *AH, TocEntry *te, int oid);
+static void _EndBlobs(ArchiveHandle *AH, TocEntry *te);
#define K_STD_BUF_SIZE 1024
#ifdef HAVE_LIBZ
- /* typedef gzFile ThingFile; */
- typedef FILE ThingFile;
+ /* typedef gzFile ThingFile; */
+typedef FILE ThingFile;
+
#else
- typedef FILE ThingFile;
+typedef FILE ThingFile;
+
#endif
-typedef struct {
- ThingFile *zFH;
- FILE *nFH;
- FILE *tarFH;
- FILE *tmpFH;
- char *targetFile;
- char mode;
- int pos;
- int fileLen;
- ArchiveHandle *AH;
+typedef struct
+{
+ ThingFile *zFH;
+ FILE *nFH;
+ FILE *tarFH;
+ FILE *tmpFH;
+ char *targetFile;
+ char mode;
+ int pos;
+ int fileLen;
+ ArchiveHandle *AH;
} TAR_MEMBER;
-typedef struct {
+typedef struct
+{
int hasSeek;
- int filePos;
- TAR_MEMBER *blobToc;
- FILE *tarFH;
+ int filePos;
+ TAR_MEMBER *blobToc;
+ FILE *tarFH;
int tarFHpos;
int tarNextMember;
- TAR_MEMBER *FH;
+ TAR_MEMBER *FH;
int isSpecialScript;
- TAR_MEMBER *scriptTH;
+ TAR_MEMBER *scriptTH;
} lclContext;
-typedef struct {
- TAR_MEMBER *TH;
- char *filename;
+typedef struct
+{
+ TAR_MEMBER *TH;
+ char *filename;
} lclTocEntry;
-static char* progname = "Archiver(tar)";
+static char *progname = "Archiver(tar)";
+
+static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt);
-static void _LoadBlobs(ArchiveHandle* AH, RestoreOptions *ropt);
+static TAR_MEMBER *tarOpen(ArchiveHandle *AH, const char *filename, char mode);
+static void tarClose(ArchiveHandle *AH, TAR_MEMBER *TH);
-static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode);
-static void tarClose(ArchiveHandle *AH, TAR_MEMBER *TH);
#ifdef __NOT_USED__
-static char* tarGets(char *buf, int len, TAR_MEMBER* th);
+static char *tarGets(char *buf, int len, TAR_MEMBER *th);
+
#endif
-static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt, ...);
+static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...);
-static void _tarAddFile(ArchiveHandle *AH, TAR_MEMBER* th);
-static int _tarChecksum(char *th);
-static TAR_MEMBER* _tarPositionTo(ArchiveHandle *AH, const char *filename);
-static int tarRead(void *buf, int len, TAR_MEMBER *th);
-static int tarWrite(const void *buf, int len, TAR_MEMBER *th);
-static void _tarWriteHeader(TAR_MEMBER* th);
-static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th);
-static int _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh);
+static void _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th);
+static int _tarChecksum(char *th);
+static TAR_MEMBER *_tarPositionTo(ArchiveHandle *AH, const char *filename);
+static int tarRead(void *buf, int len, TAR_MEMBER *th);
+static int tarWrite(const void *buf, int len, TAR_MEMBER *th);
+static void _tarWriteHeader(TAR_MEMBER *th);
+static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th);
+static int _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh);
-static int _scriptOut(ArchiveHandle *AH, const void *buf, int len);
+static int _scriptOut(ArchiveHandle *AH, const void *buf, int len);
/*
- * Initializer
+ * Initializer
*/
-void InitArchiveFmt_Tar(ArchiveHandle* AH)
+void
+InitArchiveFmt_Tar(ArchiveHandle *AH)
{
- lclContext* ctx;
-
- /* Assuming static functions, this can be copied for each format. */
- AH->ArchiveEntryPtr = _ArchiveEntry;
- AH->StartDataPtr = _StartData;
- AH->WriteDataPtr = _WriteData;
- AH->EndDataPtr = _EndData;
- AH->WriteBytePtr = _WriteByte;
- AH->ReadBytePtr = _ReadByte;
- AH->WriteBufPtr = _WriteBuf;
- AH->ReadBufPtr = _ReadBuf;
- AH->ClosePtr = _CloseArchive;
- AH->PrintTocDataPtr = _PrintTocData;
- AH->ReadExtraTocPtr = _ReadExtraToc;
- AH->WriteExtraTocPtr = _WriteExtraToc;
- AH->PrintExtraTocPtr = _PrintExtraToc;
-
- AH->StartBlobsPtr = _StartBlobs;
- AH->StartBlobPtr = _StartBlob;
- AH->EndBlobPtr = _EndBlob;
- AH->EndBlobsPtr = _EndBlobs;
-
- /*
- * Set up some special context used in compressing data.
- */
- ctx = (lclContext*)malloc(sizeof(lclContext));
- AH->formatData = (void*)ctx;
- ctx->filePos = 0;
-
- /*
- * Now open the TOC file
- */
- if (AH->mode == archModeWrite) {
-
- if (AH->fSpec && strcmp(AH->fSpec,"") != 0) {
+ lclContext *ctx;
+
+ /* Assuming static functions, this can be copied for each format. */
+ AH->ArchiveEntryPtr = _ArchiveEntry;
+ AH->StartDataPtr = _StartData;
+ AH->WriteDataPtr = _WriteData;
+ AH->EndDataPtr = _EndData;
+ AH->WriteBytePtr = _WriteByte;
+ AH->ReadBytePtr = _ReadByte;
+ AH->WriteBufPtr = _WriteBuf;
+ AH->ReadBufPtr = _ReadBuf;
+ AH->ClosePtr = _CloseArchive;
+ AH->PrintTocDataPtr = _PrintTocData;
+ AH->ReadExtraTocPtr = _ReadExtraToc;
+ AH->WriteExtraTocPtr = _WriteExtraToc;
+ AH->PrintExtraTocPtr = _PrintExtraToc;
+
+ AH->StartBlobsPtr = _StartBlobs;
+ AH->StartBlobPtr = _StartBlob;
+ AH->EndBlobPtr = _EndBlob;
+ AH->EndBlobsPtr = _EndBlobs;
+
+ /*
+ * Set up some special context used in compressing data.
+ */
+ ctx = (lclContext *) malloc(sizeof(lclContext));
+ AH->formatData = (void *) ctx;
+ ctx->filePos = 0;
+
+ /*
+ * Now open the TOC file
+ */
+ if (AH->mode == archModeWrite)
+ {
+
+ if (AH->fSpec && strcmp(AH->fSpec, "") != 0)
ctx->tarFH = fopen(AH->fSpec, PG_BINARY_W);
- } else {
+ else
ctx->tarFH = stdout;
- }
- if (ctx->tarFH == NULL)
+ if (ctx->tarFH == NULL)
die_horribly(NULL, "%s: Could not open TOC file for output.\n", progname);
ctx->tarFHpos = 0;
- /* Make unbuffered since we will dup() it, and the buffers screw each other */
+ /*
+ * Make unbuffered since we will dup() it, and the buffers screw
+ * each other
+ */
/* setvbuf(ctx->tarFH, NULL, _IONBF, 0); */
ctx->hasSeek = (fseek(ctx->tarFH, 0, SEEK_CUR) == 0);
- if (AH->compression < 0 || AH->compression > 9) {
+ if (AH->compression < 0 || AH->compression > 9)
AH->compression = Z_DEFAULT_COMPRESSION;
- }
/* Don't compress into tar files unless asked to do so */
if (AH->compression == Z_DEFAULT_COMPRESSION)
AH->compression = 0;
- /* We don't support compression because reading the files back is not possible since
- * gzdopen uses buffered IO which totally screws file positioning.
+ /*
+ * We don't support compression because reading the files back is
+ * not possible since gzdopen uses buffered IO which totally
+ * screws file positioning.
*/
if (AH->compression != 0)
die_horribly(NULL, "%s: Compression not supported in TAR output\n", progname);
- } else { /* Read Mode */
+ }
+ else
+ { /* Read Mode */
- if (AH->fSpec && strcmp(AH->fSpec,"") != 0) {
+ if (AH->fSpec && strcmp(AH->fSpec, "") != 0)
ctx->tarFH = fopen(AH->fSpec, PG_BINARY_R);
- } else {
+ else
ctx->tarFH = stdin;
- }
if (ctx->tarFH == NULL)
die_horribly(NULL, "%s: Could not open TOC file for input\n", progname);
- /* Make unbuffered since we will dup() it, and the buffers screw each other */
+ /*
+ * Make unbuffered since we will dup() it, and the buffers screw
+ * each other
+ */
/* setvbuf(ctx->tarFH, NULL, _IONBF, 0); */
ctx->tarFHpos = 0;
ctx->hasSeek = (fseek(ctx->tarFH, 0, SEEK_CUR) == 0);
- /* Forcibly unmark the header as read since we use the lookahead buffer */
+ /*
+ * Forcibly unmark the header as read since we use the lookahead
+ * buffer
+ */
AH->readHeader = 0;
- ctx->FH = (void*)tarOpen(AH, "toc.dat", 'r');
+ ctx->FH = (void *) tarOpen(AH, "toc.dat", 'r');
ReadHead(AH);
ReadToc(AH);
- tarClose(AH, ctx->FH); /* Nothing else in the file... */
- }
+ tarClose(AH, ctx->FH); /* Nothing else in the file... */
+ }
}
/*
* - Start a new TOC entry
- * Setup the output file name.
+ * Setup the output file name.
*/
-static void _ArchiveEntry(ArchiveHandle* AH, TocEntry* te)
+static void
+_ArchiveEntry(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* ctx;
- char fn[K_STD_BUF_SIZE];
+ lclTocEntry *ctx;
+ char fn[K_STD_BUF_SIZE];
- ctx = (lclTocEntry*)malloc(sizeof(lclTocEntry));
- if (te->dataDumper) {
+ ctx = (lclTocEntry *) malloc(sizeof(lclTocEntry));
+ if (te->dataDumper)
+ {
#ifdef HAVE_LIBZ
- if (AH->compression == 0) {
+ if (AH->compression == 0)
sprintf(fn, "%d.dat", te->id);
- } else {
+ else
sprintf(fn, "%d.dat.gz", te->id);
- }
#else
sprintf(fn, "%d.dat", te->id);
#endif
ctx->filename = strdup(fn);
- } else {
+ }
+ else
+ {
ctx->filename = NULL;
ctx->TH = NULL;
- }
- te->formatData = (void*)ctx;
+ }
+ te->formatData = (void *) ctx;
}
-static void _WriteExtraToc(ArchiveHandle* AH, TocEntry* te)
+static void
+_WriteExtraToc(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* ctx = (lclTocEntry*)te->formatData;
+ lclTocEntry *ctx = (lclTocEntry *) te->formatData;
- if (ctx->filename) {
+ if (ctx->filename)
WriteStr(AH, ctx->filename);
- } else {
+ else
WriteStr(AH, "");
- }
}
-static void _ReadExtraToc(ArchiveHandle* AH, TocEntry* te)
+static void
+_ReadExtraToc(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* ctx = (lclTocEntry*)te->formatData;
+ lclTocEntry *ctx = (lclTocEntry *) te->formatData;
- if (ctx == NULL) {
- ctx = (lclTocEntry*)malloc(sizeof(lclTocEntry));
- te->formatData = (void*)ctx;
- }
+ if (ctx == NULL)
+ {
+ ctx = (lclTocEntry *) malloc(sizeof(lclTocEntry));
+ te->formatData = (void *) ctx;
+ }
- ctx->filename = ReadStr(AH);
- if (strlen(ctx->filename) == 0) {
+ ctx->filename = ReadStr(AH);
+ if (strlen(ctx->filename) == 0)
+ {
free(ctx->filename);
ctx->filename = NULL;
- }
- ctx->TH = NULL;
+ }
+ ctx->TH = NULL;
}
-static void _PrintExtraToc(ArchiveHandle* AH, TocEntry* te)
+static void
+_PrintExtraToc(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* ctx = (lclTocEntry*)te->formatData;
+ lclTocEntry *ctx = (lclTocEntry *) te->formatData;
- ahprintf(AH, "-- File: %s\n", ctx->filename);
+ ahprintf(AH, "-- File: %s\n", ctx->filename);
}
-static void _StartData(ArchiveHandle* AH, TocEntry* te)
+static void
+_StartData(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* tctx = (lclTocEntry*)te->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) te->formatData;
tctx->TH = tarOpen(AH, tctx->filename, 'w');
}
-static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode)
+static TAR_MEMBER *
+tarOpen(ArchiveHandle *AH, const char *filename, char mode)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- TAR_MEMBER *tm;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ TAR_MEMBER *tm;
+
#ifdef HAVE_LIBZ
- char fmode[10];
+ char fmode[10];
+
#endif
if (mode == 'r')
{
tm = _tarPositionTo(AH, filename);
- if (!tm) /* Not found */
+ if (!tm) /* Not found */
{
- if (filename) /* Couldn't find the requested file. Future: DO SEEK(0) and retry. */
+ if (filename) /* Couldn't find the requested file.
+ * Future: DO SEEK(0) and retry. */
die_horribly(AH, "%s: unable to find file '%s' in archive\n", progname, filename);
- else /* Any file OK, non left, so return NULL */
+ else
+/* Any file OK, non left, so return NULL */
return NULL;
}
@@ -311,7 +343,7 @@ static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode)
tm->nFH = ctx->tarFH;
else
die_horribly(AH, "%s: compression support is disabled in this format\n", progname);
- /* tm->zFH = gzdopen(dup(fileno(ctx->tarFH)), "rb"); */
+ /* tm->zFH = gzdopen(dup(fileno(ctx->tarFH)), "rb"); */
#else
@@ -319,12 +351,14 @@ static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode)
#endif
- } else {
+ }
+ else
+ {
tm = calloc(1, sizeof(TAR_MEMBER));
tm->tmpFH = tmpfile();
- if (tm->tmpFH == NULL)
+ if (tm->tmpFH == NULL)
die_horribly(AH, "%s: could not generate temp file name.\n", progname);
#ifdef HAVE_LIBZ
@@ -336,7 +370,8 @@ static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode)
if (tm->zFH == NULL)
die_horribly(AH, "%s: could not gzdopen temp file.\n", progname);
- } else
+ }
+ else
tm->nFH = tm->tmpFH;
#else
@@ -356,8 +391,10 @@ static TAR_MEMBER* tarOpen(ArchiveHandle *AH, const char *filename, char mode)
}
-static void tarClose(ArchiveHandle *AH, TAR_MEMBER* th)
+static void
+tarClose(ArchiveHandle *AH, TAR_MEMBER *th)
{
+
/*
* Close the GZ file since we dup'd. This will flush the buffers.
*/
@@ -366,13 +403,14 @@ static void tarClose(ArchiveHandle *AH, TAR_MEMBER* th)
die_horribly(AH, "%s: could not close tar member\n", progname);
if (th->mode == 'w')
- _tarAddFile(AH, th); /* This will close the temp file */
- /* else
- * Nothing to do for normal read since we don't dup() normal
- * file handle, and we don't use temp files.
+ _tarAddFile(AH, th); /* This will close the temp file */
+
+ /*
+ * else Nothing to do for normal read since we don't dup() normal file
+ * handle, and we don't use temp files.
*/
- if (th->targetFile)
+ if (th->targetFile)
free(th->targetFile);
th->nFH = NULL;
@@ -380,12 +418,13 @@ static void tarClose(ArchiveHandle *AH, TAR_MEMBER* th)
}
#ifdef __NOT_USED__
-static char* tarGets(char *buf, int len, TAR_MEMBER* th)
+static char *
+tarGets(char *buf, int len, TAR_MEMBER *th)
{
- char *s;
- int cnt = 0;
- char c = ' ';
- int eof = 0;
+ char *s;
+ int cnt = 0;
+ char c = ' ';
+ int eof = 0;
/* Can't read past logical EOF */
if (len > (th->fileLen - th->pos))
@@ -393,7 +432,8 @@ static char* tarGets(char *buf, int len, TAR_MEMBER* th)
while (cnt < len && c != '\n')
{
- if (_tarReadRaw(th->AH, &c, 1, th, NULL) <= 0) {
+ if (_tarReadRaw(th->AH, &c, 1, th, NULL) <= 0)
+ {
eof = 1;
break;
}
@@ -410,30 +450,32 @@ static char* tarGets(char *buf, int len, TAR_MEMBER* th)
if (s)
{
- len = strlen(s);
+ len = strlen(s);
th->pos += len;
}
return s;
}
+
#endif
-/*
+/*
* Just read bytes from the archive. This is the low level read routine
* that is used for ALL reads on a tar file.
*/
-static int _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh)
+static int
+_tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh)
{
- lclContext *ctx = (lclContext*)AH->formatData;
- int avail;
- int used = 0;
- int res = 0;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ int avail;
+ int used = 0;
+ int res = 0;
avail = AH->lookaheadLen - AH->lookaheadPos;
if (avail > 0)
{
/* We have some lookahead bytes to use */
- if (avail >= len) /* Just use the lookahead buffer */
+ if (avail >= len) /* Just use the lookahead buffer */
used = len;
else
used = avail;
@@ -450,30 +492,32 @@ static int _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FI
if (len > 0)
{
if (fh)
- res = fread(&((char*)buf)[used], 1, len, fh);
+ res = fread(&((char *) buf)[used], 1, len, fh);
else if (th)
{
if (th->zFH)
- res = GZREAD(&((char*)buf)[used], 1, len, th->zFH);
+ res = GZREAD(&((char *) buf)[used], 1, len, th->zFH);
else
- res = fread(&((char*)buf)[used], 1, len, th->nFH);
- }
+ res = fread(&((char *) buf)[used], 1, len, th->nFH);
+ }
else
- die_horribly(AH, "%s: neither th nor fh specified in tarReadRaw\n",progname);
+ die_horribly(AH, "%s: neither th nor fh specified in tarReadRaw\n", progname);
}
- /*
- * fprintf(stderr, "%s: requested %d bytes, got %d from lookahead and %d from file\n", progname, reqLen, used, res);
+ /*
+ * fprintf(stderr, "%s: requested %d bytes, got %d from lookahead and
+ * %d from file\n", progname, reqLen, used, res);
*/
ctx->tarFHpos += res + used;
return (res + used);
}
-
-static int tarRead(void *buf, int len, TAR_MEMBER *th)
+
+static int
+tarRead(void *buf, int len, TAR_MEMBER *th)
{
- int res;
+ int res;
if (th->pos + len > th->fileLen)
len = th->fileLen - th->pos;
@@ -488,12 +532,13 @@ static int tarRead(void *buf, int len, TAR_MEMBER *th)
return res;
}
-static int tarWrite(const void *buf, int len, TAR_MEMBER *th)
+static int
+tarWrite(const void *buf, int len, TAR_MEMBER *th)
{
- int res;
+ int res;
if (th->zFH != 0)
- res = GZWRITE((void*)buf, 1, len, th->zFH);
+ res = GZWRITE((void *) buf, 1, len, th->zFH);
else
res = fwrite(buf, 1, len, th->nFH);
@@ -504,60 +549,67 @@ static int tarWrite(const void *buf, int len, TAR_MEMBER *th)
return res;
}
-static int _WriteData(ArchiveHandle* AH, const void* data, int dLen)
+static int
+_WriteData(ArchiveHandle *AH, const void *data, int dLen)
{
- lclTocEntry* tctx = (lclTocEntry*)AH->currToc->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) AH->currToc->formatData;
- dLen = tarWrite((void*)data, dLen, tctx->TH);
+ dLen = tarWrite((void *) data, dLen, tctx->TH);
- return dLen;
+ return dLen;
}
-static void _EndData(ArchiveHandle* AH, TocEntry* te)
+static void
+_EndData(ArchiveHandle *AH, TocEntry *te)
{
- lclTocEntry* tctx = (lclTocEntry*) te->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) te->formatData;
- /* Close the file */
- tarClose(AH, tctx->TH);
- tctx->TH = NULL;
+ /* Close the file */
+ tarClose(AH, tctx->TH);
+ tctx->TH = NULL;
}
-/*
- * Print data for a given file
+/*
+ * Print data for a given file
*/
-static void _PrintFileData(ArchiveHandle* AH, char *filename, RestoreOptions *ropt)
+static void
+_PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- char buf[4096];
- int cnt;
- TAR_MEMBER *th;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ char buf[4096];
+ int cnt;
+ TAR_MEMBER *th;
- if (!filename)
+ if (!filename)
return;
th = tarOpen(AH, filename, 'r');
ctx->FH = th;
- while ( (cnt = tarRead(buf, 4095, th)) > 0) {
+ while ((cnt = tarRead(buf, 4095, th)) > 0)
+ {
buf[cnt] = '\0';
ahwrite(buf, 1, cnt, AH);
- }
+ }
- tarClose(AH, th);
+ tarClose(AH, th);
}
/*
* Print data for a given TOC entry
*/
-static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt)
+static void
+_PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- lclTocEntry* tctx = (lclTocEntry*) te->formatData;
- char *tmpCopy;
- int i, pos1, pos2;
-
- if (!tctx->filename)
+ lclContext *ctx = (lclContext *) AH->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) te->formatData;
+ char *tmpCopy;
+ int i,
+ pos1,
+ pos2;
+
+ if (!tctx->filename)
return;
if (ctx->isSpecialScript)
@@ -570,12 +622,12 @@ static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt)
/* Get a copy of the COPY statement and clean it up */
tmpCopy = strdup(te->copyStmt);
- for (i=0 ; i < strlen(tmpCopy) ; i++)
+ for (i = 0; i < strlen(tmpCopy); i++)
tmpCopy[i] = tolower((unsigned char) tmpCopy[i]);
/*
- * This is very nasty; we don't know if the archive used WITH OIDS, so
- * we search the string for it in a paranoid sort of way.
+ * This is very nasty; we don't know if the archive used WITH
+ * OIDS, so we search the string for it in a paranoid sort of way.
*/
if (strncmp(tmpCopy, "copy ", 5) != 0)
die_horribly(AH, "%s: COPY statment badly formatted - could not find 'copy' in '%s'\n", progname, tmpCopy);
@@ -583,23 +635,23 @@ static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt)
pos1 = 5;
for (pos1 = 5; pos1 < strlen(tmpCopy); pos1++)
if (tmpCopy[pos1] != ' ')
- break;
+ break;
if (tmpCopy[pos1] == '"')
pos1 += 2;
-
+
pos1 += strlen(te->name);
- for (pos2 = pos1 ; pos2 < strlen(tmpCopy) ; pos2++)
+ for (pos2 = pos1; pos2 < strlen(tmpCopy); pos2++)
if (strncmp(&tmpCopy[pos2], "from stdin", 10) == 0)
break;
if (pos2 >= strlen(tmpCopy))
die_horribly(AH, "%s: COPY statment badly formatted - could not find 'from stdin' in '%s' starting at %d\n",
- progname, tmpCopy, pos1);
+ progname, tmpCopy, pos1);
- ahwrite(tmpCopy, 1, pos2, AH); /* 'copy "table" [with oids]' */
- ahprintf(AH, " from '$$PATH$$/%s' %s", tctx->filename, &tmpCopy[pos2+10]);
+ ahwrite(tmpCopy, 1, pos2, AH); /* 'copy "table" [with oids]' */
+ ahprintf(AH, " from '$$PATH$$/%s' %s", tctx->filename, &tmpCopy[pos2 + 10]);
return;
}
@@ -607,9 +659,7 @@ static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt)
if (strcmp(te->desc, "BLOBS") == 0)
_LoadBlobs(AH, ropt);
else
- {
_PrintFileData(AH, tctx->filename, ropt);
- }
}
/* static void _getBlobTocEntry(ArchiveHandle* AH, int *oid, char fname[K_STD_BUF_SIZE])
@@ -640,30 +690,32 @@ static void _PrintTocData(ArchiveHandle* AH, TocEntry* te, RestoreOptions *ropt)
*}
*/
-static void _LoadBlobs(ArchiveHandle* AH, RestoreOptions *ropt)
+static void
+_LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
{
- int oid;
- lclContext* ctx = (lclContext*)AH->formatData;
- TAR_MEMBER *th;
- int cnt;
- char buf[4096];
+ int oid;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ TAR_MEMBER *th;
+ int cnt;
+ char buf[4096];
StartRestoreBlobs(AH);
- th = tarOpen(AH, NULL, 'r'); /* Open next file */
+ th = tarOpen(AH, NULL, 'r');/* Open next file */
while (th != NULL)
{
ctx->FH = th;
oid = atoi(&th->targetFile[5]);
- if (strncmp(th->targetFile, "blob_",5) == 0 && oid != 0)
+ if (strncmp(th->targetFile, "blob_", 5) == 0 && oid != 0)
{
ahlog(AH, 1, " - Restoring BLOB oid %d\n", oid);
StartRestoreBlob(AH, oid);
- while ( (cnt = tarRead(buf, 4095, th)) > 0) {
+ while ((cnt = tarRead(buf, 4095, th)) > 0)
+ {
buf[cnt] = '\0';
ahwrite(buf, 1, cnt, AH);
}
@@ -680,60 +732,65 @@ static void _LoadBlobs(ArchiveHandle* AH, RestoreOptions *ropt)
}
-static int _WriteByte(ArchiveHandle* AH, const int i)
+static int
+_WriteByte(ArchiveHandle *AH, const int i)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- int res;
- char b = i; /* Avoid endian problems */
+ lclContext *ctx = (lclContext *) AH->formatData;
+ int res;
+ char b = i; /* Avoid endian problems */
- res = tarWrite(&b, 1, ctx->FH);
- if (res != EOF) {
+ res = tarWrite(&b, 1, ctx->FH);
+ if (res != EOF)
ctx->filePos += res;
- }
- return res;
+ return res;
}
-static int _ReadByte(ArchiveHandle* AH)
+static int
+_ReadByte(ArchiveHandle *AH)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- int res;
- char c = '\0';
+ lclContext *ctx = (lclContext *) AH->formatData;
+ int res;
+ char c = '\0';
- res = tarRead(&c, 1, ctx->FH);
- if (res != EOF) {
+ res = tarRead(&c, 1, ctx->FH);
+ if (res != EOF)
ctx->filePos += res;
- }
- return c;
+ return c;
}
-static int _WriteBuf(ArchiveHandle* AH, const void* buf, int len)
+static int
+_WriteBuf(ArchiveHandle *AH, const void *buf, int len)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- int res;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ int res;
- res = tarWrite((void*)buf, len, ctx->FH);
- ctx->filePos += res;
- return res;
+ res = tarWrite((void *) buf, len, ctx->FH);
+ ctx->filePos += res;
+ return res;
}
-static int _ReadBuf(ArchiveHandle* AH, void* buf, int len)
+static int
+_ReadBuf(ArchiveHandle *AH, void *buf, int len)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- int res;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ int res;
- res = tarRead(buf, len, ctx->FH);
- ctx->filePos += res;
- return res;
+ res = tarRead(buf, len, ctx->FH);
+ ctx->filePos += res;
+ return res;
}
-static void _CloseArchive(ArchiveHandle* AH)
+static void
+_CloseArchive(ArchiveHandle *AH)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- TAR_MEMBER *th;
- RestoreOptions *ropt;
- int savVerbose, i;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ TAR_MEMBER *th;
+ RestoreOptions *ropt;
+ int savVerbose,
+ i;
- if (AH->mode == archModeWrite) {
+ if (AH->mode == archModeWrite)
+ {
/*
* Write the Header & TOC to the archive FIRST
@@ -742,32 +799,33 @@ static void _CloseArchive(ArchiveHandle* AH)
ctx->FH = th;
WriteHead(AH);
WriteToc(AH);
- tarClose(AH, th); /* Not needed any more */
+ tarClose(AH, th); /* Not needed any more */
/*
* Now send the data (tables & blobs)
*/
WriteDataChunks(AH);
- /*
- * Now this format wants to append a script which does a full restore
- * if the files have been extracted.
+ /*
+ * Now this format wants to append a script which does a full
+ * restore if the files have been extracted.
*/
th = tarOpen(AH, "restore.sql", 'w');
tarPrintf(AH, th, "create temporary table pgdump_restore_path(p text);\n");
- tarPrintf(AH, th, "--\n"
- "-- NOTE:\n"
- "--\n"
- "-- File paths need to be edited. Search for $$PATH$$ and\n"
- "-- replace it with the path to the directory containing\n"
- "-- the extracted data files.\n"
- "--\n"
- "-- Edit the following to match the path where the\n"
- "-- tar archive has been extracted.\n"
- "--\n");
+ tarPrintf(AH, th, "--\n"
+ "-- NOTE:\n"
+ "--\n"
+ "-- File paths need to be edited. Search for $$PATH$$ and\n"
+ "-- replace it with the path to the directory containing\n"
+ "-- the extracted data files.\n"
+ "--\n"
+ "-- Edit the following to match the path where the\n"
+ "-- tar archive has been extracted.\n"
+ "--\n");
tarPrintf(AH, th, "insert into pgdump_restore_path values('/tmp');\n\n");
AH->CustomOutPtr = _scriptOut;
+
ctx->isSpecialScript = 1;
ctx->scriptTH = th;
@@ -779,27 +837,29 @@ static void _CloseArchive(ArchiveHandle* AH)
savVerbose = AH->public.verbose;
AH->public.verbose = 0;
- RestoreArchive((Archive*)AH, ropt);
+ RestoreArchive((Archive *) AH, ropt);
AH->public.verbose = savVerbose;
tarClose(AH, th);
/* Add a block of NULLs since it's de-rigeur. */
- for(i=0; i<512; i++)
+ for (i = 0; i < 512; i++)
{
if (fputc(0, ctx->tarFH) == EOF)
die_horribly(AH, "%s: could not write null block at end of TAR archive.\n", progname);
}
- }
+ }
- AH->FH = NULL;
+ AH->FH = NULL;
}
-static int _scriptOut(ArchiveHandle *AH, const void *buf, int len)
+static int
+_scriptOut(ArchiveHandle *AH, const void *buf, int len)
{
- lclContext* ctx = (lclContext*)AH->formatData;
+ lclContext *ctx = (lclContext *) AH->formatData;
+
return tarWrite(buf, len, ctx->scriptTH);
}
@@ -808,19 +868,20 @@ static int _scriptOut(ArchiveHandle *AH, const void *buf, int len)
*/
/*
- * Called by the archiver when starting to save all BLOB DATA (not schema).
+ * Called by the archiver when starting to save all BLOB DATA (not schema).
* This routine should save whatever format-specific information is needed
- * to read the BLOBs back into memory.
+ * to read the BLOBs back into memory.
*
* It is called just prior to the dumper's DataDumper routine.
*
* Optional, but strongly recommended.
*
*/
-static void _StartBlobs(ArchiveHandle* AH, TocEntry* te)
+static void
+_StartBlobs(ArchiveHandle *AH, TocEntry *te)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- char fname[K_STD_BUF_SIZE];
+ lclContext *ctx = (lclContext *) AH->formatData;
+ char fname[K_STD_BUF_SIZE];
sprintf(fname, "blobs.toc");
ctx->blobToc = tarOpen(AH, fname, 'w');
@@ -834,14 +895,15 @@ static void _StartBlobs(ArchiveHandle* AH, TocEntry* te)
*
* Must save the passed OID for retrieval at restore-time.
*/
-static void _StartBlob(ArchiveHandle* AH, TocEntry* te, int oid)
+static void
+_StartBlob(ArchiveHandle *AH, TocEntry *te, int oid)
{
- lclContext* ctx = (lclContext*)AH->formatData;
- lclTocEntry* tctx = (lclTocEntry*)te->formatData;
- char fname[255];
- char *sfx;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) te->formatData;
+ char fname[255];
+ char *sfx;
- if (oid == 0)
+ if (oid == 0)
die_horribly(AH, "%s: illegal OID for BLOB (%d)\n", progname, oid);
if (AH->compression != 0)
@@ -863,24 +925,27 @@ static void _StartBlob(ArchiveHandle* AH, TocEntry* te, int oid)
* Optional.
*
*/
-static void _EndBlob(ArchiveHandle* AH, TocEntry* te, int oid)
+static void
+_EndBlob(ArchiveHandle *AH, TocEntry *te, int oid)
{
- lclTocEntry* tctx = (lclTocEntry*)te->formatData;
+ lclTocEntry *tctx = (lclTocEntry *) te->formatData;
tarClose(AH, tctx->TH);
}
/*
- * Called by the archiver when finishing saving all BLOB DATA.
+ * Called by the archiver when finishing saving all BLOB DATA.
*
* Optional.
*
*/
-static void _EndBlobs(ArchiveHandle* AH, TocEntry* te)
+static void
+_EndBlobs(ArchiveHandle *AH, TocEntry *te)
{
- lclContext* ctx = (lclContext*)AH->formatData;
+ lclContext *ctx = (lclContext *) AH->formatData;
+
/* Write out a fake zero OID to mark end-of-blobs. */
- /* WriteInt(AH, 0); */
+ /* WriteInt(AH, 0); */
tarClose(AH, ctx->blobToc);
@@ -893,24 +958,31 @@ static void _EndBlobs(ArchiveHandle* AH, TocEntry* te)
*------------
*/
-static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt, ...)
+static int
+tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...)
{
- char *p = NULL;
+ char *p = NULL;
va_list ap;
- int bSize = strlen(fmt) + 256; /* Should be enough */
+ int bSize = strlen(fmt) + 256; /* Should be enough */
int cnt = -1;
- /* This is paranoid: deal with the possibility that vsnprintf is willing to ignore trailing null */
- /* or returns > 0 even if string does not fit. It may be the case that it returns cnt = bufsize */
- while (cnt < 0 || cnt >= (bSize - 1) )
+ /*
+ * This is paranoid: deal with the possibility that vsnprintf is
+ * willing to ignore trailing null
+ */
+
+ /*
+ * or returns > 0 even if string does not fit. It may be the case that
+ * it returns cnt = bufsize
+ */
+ while (cnt < 0 || cnt >= (bSize - 1))
{
- if (p != NULL) free(p);
+ if (p != NULL)
+ free(p);
bSize *= 2;
- p = (char*)malloc(bSize);
+ p = (char *) malloc(bSize);
if (p == NULL)
- {
die_horribly(AH, "%s: could not allocate buffer for tarPrintf\n", progname);
- }
va_start(ap, fmt);
cnt = vsnprintf(p, bSize, fmt, ap);
va_end(ap);
@@ -920,20 +992,24 @@ static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt, ...)
return cnt;
}
-static int _tarChecksum(char *header)
+static int
+_tarChecksum(char *header)
{
- int i, sum;
+ int i,
+ sum;
+
sum = 0;
- for(i = 0; i < 512; i++)
+ for (i = 0; i < 512; i++)
if (i < 148 || i >= 156)
sum += 0xFF & header[i];
- return sum + 256; /* Assume 8 blanks in checksum field */
+ return sum + 256; /* Assume 8 blanks in checksum field */
}
-int isValidTarHeader(char *header)
+int
+isValidTarHeader(char *header)
{
- int sum;
- int chk = _tarChecksum(header);
+ int sum;
+ int chk = _tarChecksum(header);
sscanf(&header[148], "%8o", &sum);
@@ -941,15 +1017,17 @@ int isValidTarHeader(char *header)
}
/* Given the member, write the TAR header & copy the file */
-static void _tarAddFile(ArchiveHandle *AH, TAR_MEMBER* th)
+static void
+_tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
{
- lclContext *ctx = (lclContext*)AH->formatData;
- FILE *tmp = th->tmpFH; /* Grab it for convenience */
+ lclContext *ctx = (lclContext *) AH->formatData;
+ FILE *tmp = th->tmpFH;/* Grab it for convenience */
char buf[32768];
int cnt;
int len = 0;
int res;
- int i, pad;
+ int i,
+ pad;
/*
* Find file len & go back to start.
@@ -960,48 +1038,52 @@ static void _tarAddFile(ArchiveHandle *AH, TAR_MEMBER* th)
_tarWriteHeader(th);
- while ( (cnt = fread(&buf[0], 1, 32767, tmp)) > 0)
+ while ((cnt = fread(&buf[0], 1, 32767, tmp)) > 0)
{
res = fwrite(&buf[0], 1, cnt, th->tarFH);
- if (res != cnt)
+ if (res != cnt)
die_horribly(AH, "%s: write error appending to TAR archive (%d != %d).\n", progname, res, cnt);
len += res;
}
- if (fclose(tmp) != 0) /* This *should* delete it... */
+ if (fclose(tmp) != 0) /* This *should* delete it... */
die_horribly(AH, "%s: Could not close tar member (fclose failed).\n", progname);
if (len != th->fileLen)
die_horribly(AH, "%s: Actual file length does not match expected (%d vs. %d).\n",
- progname, len, th->pos);
+ progname, len, th->pos);
pad = ((len + 511) & ~511) - len;
- for (i=0 ; i < pad ; i++)
+ for (i = 0; i < pad; i++)
{
- if (fputc('\0',th->tarFH) == EOF)
+ if (fputc('\0', th->tarFH) == EOF)
die_horribly(AH, "%s: Could not output padding at end of tar member.\n", progname);
- }
+ }
ctx->tarFHpos += len + pad;
}
/* Locate the file in the archive, read header and position to data */
-static TAR_MEMBER* _tarPositionTo(ArchiveHandle *AH, const char *filename)
+static TAR_MEMBER *
+_tarPositionTo(ArchiveHandle *AH, const char *filename)
{
- lclContext *ctx = (lclContext*)AH->formatData;
- TAR_MEMBER* th = calloc(1, sizeof(TAR_MEMBER));
- char c;
- char header[512];
- int i, len, blks, id;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ TAR_MEMBER *th = calloc(1, sizeof(TAR_MEMBER));
+ char c;
+ char header[512];
+ int i,
+ len,
+ blks,
+ id;
th->AH = AH;
/* Go to end of current file, if any */
if (ctx->tarFHpos != 0)
{
- ahlog(AH, 4, "Moving from %d (%x) to next member at file position %d (%x)\n",
- ctx->tarFHpos, ctx->tarFHpos,
- ctx->tarNextMember, ctx->tarNextMember);
+ ahlog(AH, 4, "Moving from %d (%x) to next member at file position %d (%x)\n",
+ ctx->tarFHpos, ctx->tarFHpos,
+ ctx->tarNextMember, ctx->tarNextMember);
while (ctx->tarFHpos < ctx->tarNextMember)
_tarReadRaw(AH, &c, 1, NULL, ctx->tarFH);
@@ -1016,28 +1098,29 @@ static TAR_MEMBER* _tarPositionTo(ArchiveHandle *AH, const char *filename)
{
if (filename)
die_horribly(AH, "%s: unable to find header for %s\n", progname, filename);
- else /* We're just scanning the archibe for the next file, so return null */
+ else
+/* We're just scanning the archibe for the next file, so return null */
{
free(th);
return NULL;
}
}
- while(filename != NULL && strcmp(th->targetFile, filename) != 0)
+ while (filename != NULL && strcmp(th->targetFile, filename) != 0)
{
ahlog(AH, 4, "Skipping member %s\n", th->targetFile);
id = atoi(th->targetFile);
if ((TocIDRequired(AH, id, AH->ropt) & 2) != 0)
die_horribly(AH, "%s: dumping data out of order is not supported in this archive format: "
- "%s is required, but comes before %s in the archive file.\n",
- progname, th->targetFile, filename);
+ "%s is required, but comes before %s in the archive file.\n",
+ progname, th->targetFile, filename);
/* Header doesn't match, so read to next header */
- len = ((th->fileLen + 511) & ~511); /* Padded length */
- blks = len >> 9; /* # of 512 byte blocks */
+ len = ((th->fileLen + 511) & ~511); /* Padded length */
+ blks = len >> 9; /* # of 512 byte blocks */
- for(i=0 ; i < blks ; i++)
+ for (i = 0; i < blks; i++)
_tarReadRaw(AH, &header[0], 512, NULL, ctx->tarFH);
if (!_tarGetHeader(AH, th))
@@ -1052,23 +1135,26 @@ static TAR_MEMBER* _tarPositionTo(ArchiveHandle *AH, const char *filename)
}
/* Read & verify a header */
-static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th)
+static int
+_tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
{
- lclContext *ctx = (lclContext*)AH->formatData;
- char h[512];
- char name[100];
- int sum, chk;
- int len;
- int hPos;
- int i;
- bool gotBlock = false;
+ lclContext *ctx = (lclContext *) AH->formatData;
+ char h[512];
+ char name[100];
+ int sum,
+ chk;
+ int len;
+ int hPos;
+ int i;
+ bool gotBlock = false;
while (!gotBlock)
{
+
/*
- * if ( ftell(ctx->tarFH) != ctx->tarFHpos)
- * die_horribly(AH, "%s: mismatch in actual vs. predicted file pos - %d vs. %d\n",
- * progname, ftell(ctx->tarFH), ctx->tarFHpos);
+ * if ( ftell(ctx->tarFH) != ctx->tarFHpos) die_horribly(AH, "%s:
+ * mismatch in actual vs. predicted file pos - %d vs. %d\n",
+ * progname, ftell(ctx->tarFH), ctx->tarFHpos);
*/
/* Save the pos for reporting purposes */
@@ -1076,7 +1162,7 @@ static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th)
/* Read a 512 byte block, return EOF, exit if short */
len = _tarReadRaw(AH, &h[0], 512, NULL, ctx->tarFH);
- if (len == 0) /* EOF */
+ if (len == 0) /* EOF */
return 0;
if (len != 512)
@@ -1086,18 +1172,19 @@ static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th)
chk = _tarChecksum(&h[0]);
/*
- * If the checksum failed, see if it is a null block.
- * If so, then just try with next block...
+ * If the checksum failed, see if it is a null block. If so, then
+ * just try with next block...
*/
- if (chk == sum) {
+ if (chk == sum)
gotBlock = true;
- } else {
- for( i = 0 ; i < 512 ; i++)
+ else
+ {
+ for (i = 0; i < 512; i++)
{
- if (h[0] != 0)
+ if (h[0] != 0)
{
- gotBlock = true;
+ gotBlock = true;
break;
}
}
@@ -1112,8 +1199,8 @@ static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th)
if (chk != sum)
die_horribly(AH, "%s: corrupt tar header found in %s "
- "(expected %d (%o), computed %d (%o)) file position %d (%x)\n",
- progname, &name[0], sum, sum, chk, chk, ftell(ctx->tarFH), ftell(ctx->tarFH));
+ "(expected %d (%o), computed %d (%o)) file position %d (%x)\n",
+ progname, &name[0], sum, sum, chk, chk, ftell(ctx->tarFH), ftell(ctx->tarFH));
th->targetFile = strdup(name);
th->fileLen = len;
@@ -1121,14 +1208,15 @@ static int _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER* th)
return 1;
}
-static void _tarWriteHeader(TAR_MEMBER* th)
+static void
+_tarWriteHeader(TAR_MEMBER *th)
{
char h[512];
int i;
int lastSum = 0;
int sum;
- for (i = 0 ; i < 512 ; i++)
+ for (i = 0; i < 512; i++)
h[i] = '\0';
/* Name 100 */
@@ -1147,7 +1235,7 @@ static void _tarWriteHeader(TAR_MEMBER* th)
sprintf(&h[124], "%10o ", th->fileLen);
/* Mod Time 12 */
- sprintf(&h[136], "%10o ", (int)time(NULL));
+ sprintf(&h[136], "%10o ", (int) time(NULL));
/* Checksum 8 */
sprintf(&h[148], "%6o ", lastSum);
@@ -1161,16 +1249,17 @@ static void _tarWriteHeader(TAR_MEMBER* th)
/* Magic 8 */
sprintf(&h[257], "ustar ");
- /* GNU Version...
- * sprintf(&h[257], "ustar");
- * sprintf(&h[263], "00");
- */
+ /*
+ * GNU Version... sprintf(&h[257], "ustar"); sprintf(&h[263], "00");
+ */
/* User 32 */
- sprintf(&h[265], "%.31s", ""); /* How do I get username reliably? Do I need to? */
+ sprintf(&h[265], "%.31s", ""); /* How do I get username reliably?
+ * Do I need to? */
/* Group 32 */
- sprintf(&h[297], "%.31s", ""); /* How do I get group reliably? Do I need to? */
+ sprintf(&h[297], "%.31s", ""); /* How do I get group reliably? Do
+ * I need to? */
/* Maj Dev 8 */
/* sprintf(&h[329], "%6o ", 0); */
@@ -1179,14 +1268,13 @@ static void _tarWriteHeader(TAR_MEMBER* th)
/* sprintf(&h[337], "%6o ", 0); */
- while ( (sum = _tarChecksum(h)) != lastSum)
+ while ((sum = _tarChecksum(h)) != lastSum)
{
sprintf(&h[148], "%6o ", sum);
lastSum = sum;
}
- if (fwrite(h, 1, 512, th->tarFH) != 512) {
+ if (fwrite(h, 1, 512, th->tarFH) != 512)
die_horribly(th->AH, "%s: unable to write tar header\n", progname);
- }
}