OSDN Git Service

Allow fseeko in pg_dump only if fseeko() will work for all supported file
authorBruce Momjian <bruce@momjian.us>
Fri, 25 Oct 2002 01:33:17 +0000 (01:33 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 25 Oct 2002 01:33:17 +0000 (01:33 +0000)
sizes.

src/bin/pg_dump/common.c
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_backup_archiver.h
src/bin/pg_dump/pg_backup_custom.c
src/bin/pg_dump/pg_backup_files.c
src/bin/pg_dump/pg_backup_tar.c

index 7870a0d..a703660 100644 (file)
@@ -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.
                 *
index d56ebdc..c5cfa2f 100644 (file)
@@ -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)
 {
index 980d262..73b5c29 100644 (file)
@@ -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 <stdio.h>
 #include <time.h>
 #include <errno.h>
 
@@ -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
index 873bfb5..c2fcef7 100644 (file)
@@ -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);
index 1bcb16c..3a49148 100644 (file)
@@ -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);
index fdfcc95..6bbd1ba 100644 (file)
@@ -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