aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_backup_custom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_backup_custom.c')
-rw-r--r--src/bin/pg_dump/pg_backup_custom.c88
1 files changed, 38 insertions, 50 deletions
diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c
index de4f023fa74..5f3a9100896 100644
--- a/src/bin/pg_dump/pg_backup_custom.c
+++ b/src/bin/pg_dump/pg_backup_custom.c
@@ -35,12 +35,12 @@
static void _ArchiveEntry(ArchiveHandle *AH, TocEntry *te);
static void _StartData(ArchiveHandle *AH, TocEntry *te);
-static size_t _WriteData(ArchiveHandle *AH, const void *data, size_t dLen);
+static void _WriteData(ArchiveHandle *AH, const void *data, size_t dLen);
static void _EndData(ArchiveHandle *AH, TocEntry *te);
static int _WriteByte(ArchiveHandle *AH, const int i);
static int _ReadByte(ArchiveHandle *);
-static size_t _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
-static size_t _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
+static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
+static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
static void _CloseArchive(ArchiveHandle *AH);
static void _ReopenArchive(ArchiveHandle *AH);
static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
@@ -86,7 +86,7 @@ typedef struct
static void _readBlockHeader(ArchiveHandle *AH, int *type, int *id);
static pgoff_t _getFilePos(ArchiveHandle *AH, lclContext *ctx);
-static size_t _CustomWriteFunc(ArchiveHandle *AH, const char *buf, size_t len);
+static void _CustomWriteFunc(ArchiveHandle *AH, const char *buf, size_t len);
static size_t _CustomReadFunc(ArchiveHandle *AH, char **buf, size_t *buflen);
/* translator: this is a module name */
@@ -315,16 +315,17 @@ _StartData(ArchiveHandle *AH, TocEntry *te)
*
* Mandatory.
*/
-static size_t
+static void
_WriteData(ArchiveHandle *AH, const void *data, size_t dLen)
{
lclContext *ctx = (lclContext *) AH->formatData;
CompressorState *cs = ctx->cs;
- if (dLen == 0)
- return 0;
+ if (dLen > 0)
+ /* WriteDataToArchive() internally throws write errors */
+ WriteDataToArchive(AH, cs, data, dLen);
- return WriteDataToArchive(AH, cs, data, dLen);
+ return;
}
/*
@@ -579,8 +580,7 @@ _skipData(ArchiveHandle *AH)
buf = (char *) pg_malloc(blkLen);
buflen = blkLen;
}
- cnt = fread(buf, 1, blkLen, AH->FH);
- if (cnt != blkLen)
+ if ((cnt = fread(buf, 1, blkLen, AH->FH)) != blkLen)
{
if (feof(AH->FH))
exit_horribly(modulename,
@@ -610,14 +610,13 @@ static int
_WriteByte(ArchiveHandle *AH, const int i)
{
lclContext *ctx = (lclContext *) AH->formatData;
- int res;
+ int res;
- res = fputc(i, AH->FH);
- if (res != EOF)
- ctx->filePos += 1;
- else
- exit_horribly(modulename, "could not write byte: %s\n", strerror(errno));
- return res;
+ if ((res = fputc(i, AH->FH)) == EOF)
+ WRITE_ERROR_EXIT;
+ ctx->filePos += 1;
+
+ return 1;
}
/*
@@ -636,7 +635,7 @@ _ReadByte(ArchiveHandle *AH)
res = getc(AH->FH);
if (res == EOF)
- exit_horribly(modulename, "unexpected end of file\n");
+ READ_ERROR_EXIT(AH->FH);
ctx->filePos += 1;
return res;
}
@@ -648,20 +647,16 @@ _ReadByte(ArchiveHandle *AH)
*
* Called by the archiver to write a block of bytes to the archive.
*/
-static size_t
+static void
_WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
{
lclContext *ctx = (lclContext *) AH->formatData;
- size_t res;
- res = fwrite(buf, 1, len, AH->FH);
+ if (fwrite(buf, 1, len, AH->FH) != len)
+ WRITE_ERROR_EXIT;
+ ctx->filePos += len;
- if (res != len)
- exit_horribly(modulename,
- "could not write to output file: %s\n", strerror(errno));
-
- ctx->filePos += res;
- return res;
+ return;
}
/*
@@ -671,16 +666,16 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
*
* Called by the archiver to read a block of bytes from the archive
*/
-static size_t
+static void
_ReadBuf(ArchiveHandle *AH, void *buf, size_t len)
{
lclContext *ctx = (lclContext *) AH->formatData;
- size_t res;
- res = fread(buf, 1, len, AH->FH);
- ctx->filePos += res;
+ if (fread(buf, 1, len, AH->FH) != len)
+ READ_ERROR_EXIT(AH->FH);
+ ctx->filePos += len;
- return res;
+ return;
}
/*
@@ -959,15 +954,16 @@ _readBlockHeader(ArchiveHandle *AH, int *type, int *id)
* Callback function for WriteDataToArchive. Writes one block of (compressed)
* data to the archive.
*/
-static size_t
+static void
_CustomWriteFunc(ArchiveHandle *AH, const char *buf, size_t len)
{
/* never write 0-byte blocks (this should not happen) */
- if (len == 0)
- return 0;
-
- WriteInt(AH, len);
- return _WriteBuf(AH, buf, len);
+ if (len > 0)
+ {
+ WriteInt(AH, len);
+ _WriteBuf(AH, buf, len);
+ }
+ return;
}
/*
@@ -978,7 +974,6 @@ static size_t
_CustomReadFunc(ArchiveHandle *AH, char **buf, size_t *buflen)
{
size_t blkLen;
- size_t cnt;
/* Read length */
blkLen = ReadInt(AH);
@@ -993,15 +988,8 @@ _CustomReadFunc(ArchiveHandle *AH, char **buf, size_t *buflen)
*buflen = blkLen;
}
- cnt = _ReadBuf(AH, *buf, blkLen);
- if (cnt != blkLen)
- {
- if (feof(AH->FH))
- exit_horribly(modulename,
- "could not read from input file: end of file\n");
- else
- exit_horribly(modulename,
- "could not read from input file: %s\n", strerror(errno));
- }
- return cnt;
+ /* exits app on read errors */
+ _ReadBuf(AH, *buf, blkLen);
+
+ return blkLen;
}