From 9cbb5fcd2b1aa0affc19394fd5b007ed94965ec5 Mon Sep 17 00:00:00 2001 From: Philip Warner Date: Tue, 24 Oct 2000 13:24:30 +0000 Subject: [PATCH] Various fixes to TAR header format Fix for endian bug in TAR output Nicer error messages in pg_dump --- src/bin/pg_dump/pg_backup_archiver.h | 2 +- src/bin/pg_dump/pg_backup_tar.c | 30 +++++++++++++++++----------- src/bin/pg_dump/pg_dump.c | 20 +++++++++++++++++-- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index e82cae170f..417c50bf68 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -62,7 +62,7 @@ typedef z_stream *z_streamp; #define K_VERS_MAJOR 1 #define K_VERS_MINOR 4 -#define K_VERS_REV 19 +#define K_VERS_REV 20 /* Data block types */ #define BLK_DATA 1 diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 6a3b212206..674c24191d 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -673,8 +673,8 @@ static void _LoadBlobs(ArchiveHandle* AH, RestoreOptions *ropt) static int _WriteByte(ArchiveHandle* AH, const int i) { lclContext* ctx = (lclContext*)AH->formatData; - int res; - int b = i; + int res; + char b = i; /* Avoid endian problems */ res = tarWrite(&b, 1, ctx->FH); if (res != EOF) { @@ -1088,28 +1088,34 @@ static void _tarWriteHeader(TAR_MEMBER* th) sprintf(&h[100], "100600 "); /* User ID 8 */ - sprintf(&h[108], " 0 "); + sprintf(&h[108], " 04000 "); /* Group 8 */ - sprintf(&h[116], " 0 "); + sprintf(&h[116], " 02000 "); /* File size 12 */ - sprintf(&h[124], "%12o", th->fileLen); + sprintf(&h[124], "%10o ", th->fileLen); /* Mod Time 12 */ - sprintf(&h[136], "%12o", (int)time(NULL)); + sprintf(&h[136], "%10o ", (int)time(NULL)); /* Checksum 8 */ - sprintf(&h[148], "%8o", lastSum); + sprintf(&h[148], "%6o ", lastSum); - /* Link 1 */ - sprintf(&h[156], "%c", LF_NORMAL); + /* Type 1 */ + /* sprintf(&h[156], "%c", LF_NORMAL); */ + sprintf(&h[156], "0"); /* Link name 100 (NULL) */ /* Magic 8 */ sprintf(&h[257], "ustar "); + /* 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? */ @@ -1117,15 +1123,15 @@ static void _tarWriteHeader(TAR_MEMBER* th) sprintf(&h[297], "%.31s", ""); /* How do I get group reliably? Do I need to? */ /* Maj Dev 8 */ - /* sprintf(&h[329], "%8o", 0); */ + /* sprintf(&h[329], "%6o ", 0); */ /* Min Dev */ - /* sprintf(&h[337], "%8o", 0); */ + /* sprintf(&h[337], "%6o ", 0); */ while ( (sum = _tarChecksum(h)) != lastSum) { - sprintf(&h[148], "%8o", sum); + sprintf(&h[148], "%6o ", sum); lastSum = sum; } diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 0d2c161280..0ae0ee0014 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -22,7 +22,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.175 2000/10/24 01:38:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.176 2000/10/24 13:24:30 pjw Exp $ * * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb * @@ -696,7 +696,7 @@ main(int argc, char **argv) if (strcmp(progname, "pg_backup") == 0) { format = "c"; - outputBlobs = 1; + outputBlobs = true; } #ifdef HAVE_GETOPT_LONG @@ -864,6 +864,14 @@ main(int argc, char **argv) } } + if (optind < (argc - 1)) { + fprintf(stderr, + "%s: extra parameters found on command line after '%s' (first is '%s').\n" + "Please respecify command.\nUse -? for help on invocation options.\n", + progname, argv[optind], argv[optind+1]); + exit(1); + } + if (dataOnly && schemaOnly) { fprintf(stderr, @@ -888,6 +896,14 @@ main(int argc, char **argv) exit(1); } + if (outputBlobs == true && (format[0] == 'p' || format[0] == 'P') ) + { + fprintf(stderr, + "%s: BLOB output is not supported for plain text dump files. Use a different output format.\n", + progname); + exit(1); + } + /* open the output file */ switch (format[0]) { -- 2.40.0