From: Bruce Momjian Date: Fri, 25 Oct 2002 01:33:17 +0000 (+0000) Subject: Allow fseeko in pg_dump only if fseeko() will work for all supported file X-Git-Tag: REL9_0_0~16450 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fc5c577e34a53af8104415bae63d315fee2b125a;p=pg-rex%2Fsyncrep.git Allow fseeko in pg_dump only if fseeko() will work for all supported file sizes. --- diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 7870a0d66d..a703660aa2 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.71 2002/10/09 16:20:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.72 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -290,7 +290,7 @@ flagInhAttrs(TableInfo *tblinfo, int numTables, * attr with the same name, then only dump it if: * * - it is NOT NULL and zero parents are NOT NULL - * OR + * OR * - it has a default value AND the default value does not match * all parent default values, or no parents specify a default. * diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index d56ebdcd06..c5cfa2f405 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.59 2002/10/22 19:15:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.60 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -2338,6 +2338,32 @@ ReadHead(ArchiveHandle *AH) } +/* + * checkSeek + * check to see if fseek can be performed. + */ + +bool +checkSeek(FILE *fp) +{ + + if (fseek(fp, 0, SEEK_CUR) != 0) + return false; + else if (sizeof(off_t) > sizeof(long)) + /* + * At this point, off_t is too large for long, so we return + * based on whether an off_t version of fseek is available. + */ +#ifdef HAVE_FSEEKO + return true; +#else + return false; +#endif + else + return true; +} + + static void _SortToc(ArchiveHandle *AH, TocSortCompareFn fn) { diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index 980d262e93..73b5c29c32 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -17,7 +17,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.48 2002/10/22 19:15:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.49 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,6 +27,7 @@ #include "postgres_fe.h" +#include #include #include @@ -284,6 +285,7 @@ extern void ReadToc(ArchiveHandle *AH); extern void WriteDataChunks(ArchiveHandle *AH); extern int TocIDRequired(ArchiveHandle *AH, int id, RestoreOptions *ropt); +extern bool checkSeek(FILE *fp); /* * Mandatory routines for each supported format diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c index 873bfb59ce..c2fcef7536 100644 --- a/src/bin/pg_dump/pg_backup_custom.c +++ b/src/bin/pg_dump/pg_backup_custom.c @@ -19,7 +19,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.22 2002/10/22 19:15:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.23 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -179,7 +179,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH) if (!AH->FH) die_horribly(AH, modulename, "could not open archive file %s: %s\n", AH->fSpec, strerror(errno)); - ctx->hasSeek = (fseeko(AH->FH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(AH->FH); } else { @@ -190,7 +190,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH) if (!AH->FH) die_horribly(AH, modulename, "could not open archive file %s: %s\n", AH->fSpec, strerror(errno)); - ctx->hasSeek = (fseeko(AH->FH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(AH->FH); ReadHead(AH); ReadToc(AH); diff --git a/src/bin/pg_dump/pg_backup_files.c b/src/bin/pg_dump/pg_backup_files.c index 1bcb16ca00..3a4914828a 100644 --- a/src/bin/pg_dump/pg_backup_files.c +++ b/src/bin/pg_dump/pg_backup_files.c @@ -20,7 +20,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.20 2002/10/22 19:15:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.21 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -129,7 +129,7 @@ InitArchiveFmt_Files(ArchiveHandle *AH) if (AH->FH == NULL) die_horribly(NULL, modulename, "could not open output file: %s\n", strerror(errno)); - ctx->hasSeek = (fseeko(AH->FH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(AH->FH); if (AH->compression < 0 || AH->compression > 9) AH->compression = Z_DEFAULT_COMPRESSION; @@ -147,7 +147,7 @@ InitArchiveFmt_Files(ArchiveHandle *AH) if (AH->FH == NULL) die_horribly(NULL, modulename, "could not open input file: %s\n", strerror(errno)); - ctx->hasSeek = (fseeko(AH->FH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(AH->FH); ReadHead(AH); ReadToc(AH); diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index fdfcc95d4b..6bbd1ba2a3 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -16,7 +16,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.31 2002/10/22 19:15:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.32 2002/10/25 01:33:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -190,7 +190,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) */ /* setvbuf(ctx->tarFH, NULL, _IONBF, 0); */ - ctx->hasSeek = (fseeko(ctx->tarFH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(ctx->tarFH); if (AH->compression < 0 || AH->compression > 9) AH->compression = Z_DEFAULT_COMPRESSION; @@ -227,7 +227,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH) ctx->tarFHpos = 0; - ctx->hasSeek = (fseeko(ctx->tarFH, 0, SEEK_CUR) == 0); + ctx->hasSeek = checkSeek(ctx->tarFH); /* * Forcibly unmark the header as read since we use the lookahead