mirror of
https://github.com/postgres/postgres.git
synced 2025-07-11 10:01:57 +03:00
Various fixes to TAR header format
Fix for endian bug in TAR output Nicer error messages in pg_dump
This commit is contained in:
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
|||||||
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]) {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user