Commit 9cbb5fcd authored by Philip Warner's avatar Philip Warner

Various fixes to TAR header format

Fix for endian bug in TAR output
Nicer error messages in pg_dump
parent db2faa94
...@@ -62,7 +62,7 @@ typedef z_stream *z_streamp; ...@@ -62,7 +62,7 @@ typedef z_stream *z_streamp;
#define K_VERS_MAJOR 1 #define K_VERS_MAJOR 1
#define K_VERS_MINOR 4 #define K_VERS_MINOR 4
#define K_VERS_REV 19 #define K_VERS_REV 20
/* Data block types */ /* Data block types */
#define BLK_DATA 1 #define BLK_DATA 1
......
...@@ -673,8 +673,8 @@ static void _LoadBlobs(ArchiveHandle* AH, RestoreOptions *ropt) ...@@ -673,8 +673,8 @@ 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; lclContext* ctx = (lclContext*)AH->formatData;
int res; int res;
int b = i; char b = i; /* Avoid endian problems */
res = tarWrite(&b, 1, ctx->FH); res = tarWrite(&b, 1, ctx->FH);
if (res != EOF) { if (res != EOF) {
...@@ -1088,28 +1088,34 @@ static void _tarWriteHeader(TAR_MEMBER* th) ...@@ -1088,28 +1088,34 @@ static void _tarWriteHeader(TAR_MEMBER* th)
sprintf(&h[100], "100600 "); sprintf(&h[100], "100600 ");
/* User ID 8 */ /* User ID 8 */
sprintf(&h[108], " 0 "); sprintf(&h[108], " 04000 ");
/* Group 8 */ /* Group 8 */
sprintf(&h[116], " 0 "); sprintf(&h[116], " 02000 ");
/* File size 12 */ /* File size 12 */
sprintf(&h[124], "%12o", th->fileLen); sprintf(&h[124], "%10o ", th->fileLen);
/* Mod Time 12 */ /* Mod Time 12 */
sprintf(&h[136], "%12o", (int)time(NULL)); sprintf(&h[136], "%10o ", (int)time(NULL));
/* Checksum 8 */ /* Checksum 8 */
sprintf(&h[148], "%8o", lastSum); sprintf(&h[148], "%6o ", lastSum);
/* Link 1 */ /* Type 1 */
sprintf(&h[156], "%c", LF_NORMAL); /* sprintf(&h[156], "%c", LF_NORMAL); */
sprintf(&h[156], "0");
/* Link name 100 (NULL) */ /* Link name 100 (NULL) */
/* Magic 8 */ /* Magic 8 */
sprintf(&h[257], "ustar "); sprintf(&h[257], "ustar ");
/* GNU Version...
* sprintf(&h[257], "ustar");
* sprintf(&h[263], "00");
*/
/* User 32 */ /* 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? */
...@@ -1117,15 +1123,15 @@ static void _tarWriteHeader(TAR_MEMBER* th) ...@@ -1117,15 +1123,15 @@ static void _tarWriteHeader(TAR_MEMBER* th)
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 */ /* Maj Dev 8 */
/* sprintf(&h[329], "%8o", 0); */ /* sprintf(&h[329], "%6o ", 0); */
/* Min Dev */ /* Min Dev */
/* sprintf(&h[337], "%8o", 0); */ /* sprintf(&h[337], "%6o ", 0); */
while ( (sum = _tarChecksum(h)) != lastSum) while ( (sum = _tarChecksum(h)) != lastSum)
{ {
sprintf(&h[148], "%8o", sum); sprintf(&h[148], "%6o ", sum);
lastSum = sum; lastSum = sum;
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* *
* *
* IDENTIFICATION * 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 * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
* *
...@@ -696,7 +696,7 @@ main(int argc, char **argv) ...@@ -696,7 +696,7 @@ main(int argc, char **argv)
if (strcmp(progname, "pg_backup") == 0) if (strcmp(progname, "pg_backup") == 0)
{ {
format = "c"; format = "c";
outputBlobs = 1; outputBlobs = true;
} }
#ifdef HAVE_GETOPT_LONG #ifdef HAVE_GETOPT_LONG
...@@ -864,6 +864,14 @@ main(int argc, char **argv) ...@@ -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) if (dataOnly && schemaOnly)
{ {
fprintf(stderr, fprintf(stderr,
...@@ -888,6 +896,14 @@ main(int argc, char **argv) ...@@ -888,6 +896,14 @@ main(int argc, char **argv)
exit(1); 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 */ /* open the output file */
switch (format[0]) { switch (format[0]) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment