From 9815e5b49a291bfd6175823f2f386ccef8e74ece Mon Sep 17 00:00:00 2001 From: Brian Weaver Date: Thu, 27 Sep 2012 21:32:07 -0400 Subject: [PATCH] Minimal changes necessary to complie with tar spec Made the absolute minimal so that the output is compliant with the tar specification. --- src/backend/replication/basebackup.c | 20 +++++++------------- 1 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 4aaa9e3..0ef3c92 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -765,9 +765,8 @@ _tarChecksum(char *header) sum = 0; 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; } /* Given the member, write the TAR header & send the file */ @@ -846,8 +845,6 @@ _tarWriteHeader(const char *filename, const char *linktarget, struct stat * statbuf) { char h[512]; - int lastSum = 0; - int sum; memset(h, 0, sizeof(h)); @@ -871,7 +868,7 @@ _tarWriteHeader(const char *filename, const char *linktarget, sprintf(&h[108], "%07o ", statbuf->st_uid); /* Group 8 */ - sprintf(&h[117], "%07o ", statbuf->st_gid); + sprintf(&h[116], "%07o ", statbuf->st_gid); /* File size 12 - 11 digits, 1 space, no NUL */ if (linktarget != NULL || S_ISDIR(statbuf->st_mode)) @@ -884,8 +881,8 @@ _tarWriteHeader(const char *filename, const char *linktarget, /* Mod Time 12 */ sprintf(&h[136], "%011o ", (int) statbuf->st_mtime); - /* Checksum 8 */ - sprintf(&h[148], "%06o ", lastSum); + /* Checksum 8 "12345678" */ + sprintf(&h[148], " "); if (linktarget != NULL) { @@ -903,7 +900,8 @@ _tarWriteHeader(const char *filename, const char *linktarget, /* Link tag 100 (NULL) */ /* Magic 6 + Version 2 */ - sprintf(&h[257], "ustar00"); + sprintf(&h[257], "ustar"); + sprintf(&h[263], "00"); /* User 32 */ /* XXX: Do we need to care about setting correct username? */ @@ -919,11 +917,7 @@ _tarWriteHeader(const char *filename, const char *linktarget, /* Min Dev 8 */ sprintf(&h[337], "%6o ", 0); - while ((sum = _tarChecksum(h)) != lastSum) - { - sprintf(&h[148], "%06o ", sum); - lastSum = sum; - } + sprintf(&h[148], "%06o ", _tarChecksum(h)); pq_putmessage('d', h, 512); } -- 1.7.7.5 (Apple Git-26)