diff options
Diffstat (limited to 'src/bin/pg_dump/pg_backup_tar.c')
-rw-r--r-- | src/bin/pg_dump/pg_backup_tar.c | 92 |
1 files changed, 49 insertions, 43 deletions
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 8c67141cd35..97001c27f67 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -16,7 +16,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.15 2001/04/25 07:03:19 pjw Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.16 2001/06/27 21:21:37 petere Exp $ * * Modifications - 28-Jun-2000 - pjw@rhyme.com.au * @@ -101,7 +101,7 @@ typedef struct char *filename; } lclTocEntry; -static char *progname = "Archiver(tar)"; +static char *modulename = "tar archiver"; static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt); @@ -172,7 +172,8 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) ctx->tarFH = stdout; if (ctx->tarFH == NULL) - die_horribly(NULL, "%s: Could not open TOC file for output.\n", progname); + die_horribly(NULL, modulename, + "could not open TOC file for output: %s\n", strerror(errno)); ctx->tarFHpos = 0; @@ -197,7 +198,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) * screws file positioning. */ if (AH->compression != 0) - die_horribly(NULL, "%s: Compression not supported in TAR output\n", progname); + die_horribly(NULL, modulename, "compression not supported by tar output format\n"); } else @@ -209,7 +210,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) ctx->tarFH = stdin; if (ctx->tarFH == NULL) - die_horribly(NULL, "%s: Could not open TOC file for input\n", progname); + die_horribly(NULL, modulename, "could not open TOC file for input: %s\n", strerror(errno)); /* * Make unbuffered since we will dup() it, and the buffers screw @@ -332,7 +333,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) { 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); + die_horribly(AH, modulename, "could not find file %s in archive\n", filename); else /* Any file OK, non left, so return NULL */ return NULL; @@ -343,7 +344,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) if (AH->compression == 0) tm->nFH = ctx->tarFH; else - die_horribly(AH, "%s: compression support is disabled in this format\n", progname); + die_horribly(AH, modulename, "compression support is disabled in this format\n"); /* tm->zFH = gzdopen(dup(fileno(ctx->tarFH)), "rb"); */ #else @@ -360,7 +361,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) tm->tmpFH = tmpfile(); if (tm->tmpFH == NULL) - die_horribly(AH, "%s: could not generate temp file name.\n", progname); + die_horribly(AH, modulename, "could not generate temporary file name: %s\n", strerror(errno)); #ifdef HAVE_LIBZ @@ -369,7 +370,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode) sprintf(fmode, "wb%d", AH->compression); tm->zFH = gzdopen(dup(fileno(tm->tmpFH)), fmode); if (tm->zFH == NULL) - die_horribly(AH, "%s: could not gzdopen temp file.\n", progname); + die_horribly(AH, modulename, "could not gzdopen temporary file\n"); } else @@ -401,7 +402,7 @@ tarClose(ArchiveHandle *AH, TAR_MEMBER *th) */ if (AH->compression != 0) if (GZCLOSE(th->zFH) != 0) - die_horribly(AH, "%s: could not close tar member\n", progname); + die_horribly(AH, modulename, "could not close tar member\n"); if (th->mode == 'w') _tarAddFile(AH, th); /* This will close the temp file */ @@ -502,13 +503,13 @@ _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh) 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, modulename, "neither th nor fh specified in tarReadRaw() (internal error)\n"); } - /* - * fprintf(stderr, "%s: requested %d bytes, got %d from lookahead and - * %d from file\n", progname, reqLen, used, res); - */ +#if 0 + write_msg(modulename, "requested %d bytes, got %d from lookahead and %d from file\n", + reqLen, used, res); +#endif ctx->tarFHpos += res + used; @@ -544,7 +545,8 @@ tarWrite(const void *buf, int len, TAR_MEMBER *th) res = fwrite(buf, 1, len, th->nFH); if (res != len) - die_horribly(th->AH, "%s: could not write to tar member (%d != %d)\n", progname, res, len); + die_horribly(th->AH, modulename, + "could not write to tar member (wrote %d, attempted %d)\n", res, len); th->pos += res; return res; @@ -631,7 +633,8 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt) * 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); + die_horribly(AH, modulename, + "bad COPY statement - could not find \"copy\" in string \"%s\"\n", tmpCopy); pos1 = 5; for (pos1 = 5; pos1 < strlen(tmpCopy); pos1++) @@ -648,8 +651,9 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt) 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); + die_horribly(AH, modulename, + "bad COPY statement - could not find \"from stdin\" in string \"%s\" starting at position %d\n", + tmpCopy, pos1); ahwrite(tmpCopy, 1, pos2, AH); /* 'copy "table" [with oids]' */ ahprintf(AH, " from '$$PATH$$/%s' %s", tctx->filename, &tmpCopy[pos2 + 10]); @@ -849,7 +853,8 @@ _CloseArchive(ArchiveHandle *AH) 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); + die_horribly(AH, modulename, + "could not write null block at end of tar archive\n"); } } @@ -906,7 +911,7 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid) char *sfx; if (oid == 0) - die_horribly(AH, "%s: illegal OID for BLOB (%d)\n", progname, oid); + die_horribly(AH, modulename, "invalid OID for BLOB (%u)\n", oid); if (AH->compression != 0) sfx = ".gz"; @@ -984,7 +989,7 @@ tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...) bSize *= 2; p = (char *) malloc(bSize); if (p == NULL) - die_horribly(AH, "%s: could not allocate buffer for tarPrintf\n", progname); + die_horribly(AH, modulename, "out of memory\n"); va_start(ap, fmt); cnt = vsnprintf(p, bSize, fmt, ap); va_end(ap); @@ -1044,22 +1049,22 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th) { res = fwrite(&buf[0], 1, cnt, th->tarFH); if (res != cnt) - die_horribly(AH, "%s: write error appending to TAR archive (%d != %d).\n", progname, res, cnt); + die_horribly(AH, modulename, "write error appending to tar archive (wrote %d, attempted %d)\n", res, cnt); len += res; } if (fclose(tmp) != 0) /* This *should* delete it... */ - die_horribly(AH, "%s: Could not close tar member (fclose failed).\n", progname); + die_horribly(AH, modulename, "could not close tar member: %s\n", strerror(errno)); if (len != th->fileLen) - die_horribly(AH, "%s: Actual file length does not match expected (%d vs. %d).\n", - progname, len, th->pos); + die_horribly(AH, modulename, "actual file length (%d) does not match expected (%d)\n", + len, th->pos); pad = ((len + 511) & ~511) - len; for (i = 0; i < pad; i++) { if (fputc('\0', th->tarFH) == EOF) - die_horribly(AH, "%s: Could not output padding at end of tar member.\n", progname); + die_horribly(AH, modulename, "could not output padding at end of tar member\n"); } ctx->tarFHpos += len + pad; @@ -1099,7 +1104,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename) if (!_tarGetHeader(AH, th)) { if (filename) - die_horribly(AH, "%s: unable to find header for %s\n", progname, filename); + die_horribly(AH, modulename, "could not find header for file %s in tar archive\n", filename); else /* We're just scanning the archibe for the next file, so return null */ { @@ -1114,9 +1119,9 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename) 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); + die_horribly(AH, modulename, "dumping data out of order is not supported in this archive format: " + "%s is required, but comes before %s in the archive file.\n", + th->targetFile, filename); /* Header doesn't match, so read to next header */ len = ((th->fileLen + 511) & ~511); /* Padded length */ @@ -1126,7 +1131,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename) _tarReadRaw(AH, &header[0], 512, NULL, ctx->tarFH); if (!_tarGetHeader(AH, th)) - die_horribly(AH, "%s: unable to find header for %s\n", progname, filename); + die_horribly(AH, modulename, "could not find header for file %s in tar archive\n", filename); } @@ -1152,12 +1157,12 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th) 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 0 + if (ftell(ctx->tarFH) != ctx->tarFHpos) + die_horribly(AH, modulename, + "mismatch in actual vs. predicted file position (%d vs. %d)\n", + ftell(ctx->tarFH), ctx->tarFHpos); +#endif /* Save the pos for reporting purposes */ hPos = ctx->tarFHpos; @@ -1168,7 +1173,7 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th) return 0; if (len != 512) - die_horribly(AH, "%s: incomplete tar header found (%d bytes)\n", progname, len); + die_horribly(AH, modulename, "incomplete tar header found (%d bytes)\n", len); /* Calc checksum */ chk = _tarChecksum(&h[0]); @@ -1200,9 +1205,10 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th) ahlog(AH, 3, "TOC Entry %s at %d (len=%d, chk=%d)\n", &name[0], hPos, len, sum); 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)); + die_horribly(AH, modulename, + "corrupt tar header found in %s " + "(expected %d (%o), computed %d (%o)) file position %ld (%lx)\n", + &name[0], sum, sum, chk, chk, ftell(ctx->tarFH), ftell(ctx->tarFH)); th->targetFile = strdup(name); th->fileLen = len; @@ -1277,6 +1283,6 @@ _tarWriteHeader(TAR_MEMBER *th) } if (fwrite(h, 1, 512, th->tarFH) != 512) - die_horribly(th->AH, "%s: unable to write tar header\n", progname); + die_horribly(th->AH, modulename, "unable to write tar header\n"); } |