]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Various fixes to TAR header format
authorPhilip Warner <pjw@rhyme.com.au>
Tue, 24 Oct 2000 13:24:30 +0000 (13:24 +0000)
committerPhilip Warner <pjw@rhyme.com.au>
Tue, 24 Oct 2000 13:24:30 +0000 (13:24 +0000)
Fix for endian bug in TAR output
Nicer error messages in pg_dump

src/bin/pg_dump/pg_backup_archiver.h
src/bin/pg_dump/pg_backup_tar.c
src/bin/pg_dump/pg_dump.c

index e82cae170f516bc5f90f3a72b282db3a9b65702e..417c50bf68a859a3742f1fa8a6fd2d13b6ec2276 100644 (file)
@@ -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
index 6a3b2122064593f937bb93c93e3fe7dbb0481833..674c24191dc14f613ee8cfb275fd691994d0c835 100644 (file)
@@ -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;
        }
 
index 0d2c16128054afb79575a96a249d8fb79b22c70f..0ae0ee00144182773c2843f96627b660b03c27e2 100644 (file)
@@ -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]) {