0001-Use-64-bit-type-for-BufFileSize.patch
application/octet-stream
Filename: 0001-Use-64-bit-type-for-BufFileSize.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Use 64 bit type for BufFileSize().
| File | + | − |
|---|---|---|
| src/backend/storage/file/buffile.c | 3 | 3 |
| src/backend/utils/sort/logtape.c | 1 | 1 |
| src/include/storage/buffile.h | 1 | 1 |
From b7145665b2b03d2081a7064aa2328dd79dab9297 Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@enterprisedb.com>
Date: Tue, 13 Nov 2018 22:28:40 +1300
Subject: [PATCH] Use 64 bit type for BufFileSize().
BufFileSize() can't use off_t, because it's only 32 bits wide on
some systems. BufFile objects can have many 1GB segments so the
total size can exceed 2^31. Bug #15460.
Back-patch to 11, where this function landed.
Discussion: https://postgr.es/m/15460-b6db80de822fa0ad%40postgresql.org
Discussion: https://postgr.es/m/CAHDGBJP_GsESbTt4P3FZA8kMUKuYxjg57XHF7NRBoKnR%3DCAR-g%40mail.gmail.com
---
src/backend/storage/file/buffile.c | 6 +++---
src/backend/utils/sort/logtape.c | 2 +-
src/include/storage/buffile.h | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/backend/storage/file/buffile.c b/src/backend/storage/file/buffile.c
index dd687dfe71f..d3722616bba 100644
--- a/src/backend/storage/file/buffile.c
+++ b/src/backend/storage/file/buffile.c
@@ -768,17 +768,17 @@ BufFileTellBlock(BufFile *file)
* Counts any holes left behind by BufFileAppend as part of the size.
* Returns -1 on error.
*/
-off_t
+int64
BufFileSize(BufFile *file)
{
- off_t lastFileSize;
+ int64 lastFileSize;
/* Get the size of the last physical file. */
lastFileSize = FileSize(file->files[file->numFiles - 1]);
if (lastFileSize < 0)
return -1;
- return ((file->numFiles - 1) * (off_t) MAX_PHYSICAL_FILESIZE) +
+ return ((file->numFiles - 1) * (int64) MAX_PHYSICAL_FILESIZE) +
lastFileSize;
}
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index 50a150b7136..269523d5f6a 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -426,7 +426,7 @@ ltsConcatWorkerTapes(LogicalTapeSet *lts, TapeShare *shared,
{
char filename[MAXPGPATH];
BufFile *file;
- off_t filesize;
+ int64 filesize;
lt = <s->tapes[i];
diff --git a/src/include/storage/buffile.h b/src/include/storage/buffile.h
index a6cdeb451c1..a4043bd69d1 100644
--- a/src/include/storage/buffile.h
+++ b/src/include/storage/buffile.h
@@ -43,7 +43,7 @@ extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size);
extern int BufFileSeek(BufFile *file, int fileno, off_t offset, int whence);
extern void BufFileTell(BufFile *file, int *fileno, off_t *offset);
extern int BufFileSeekBlock(BufFile *file, long blknum);
-extern off_t BufFileSize(BufFile *file);
+extern int64 BufFileSize(BufFile *file);
extern long BufFileAppend(BufFile *target, BufFile *source);
extern BufFile *BufFileCreateShared(SharedFileSet *fileset, const char *name);
--
2.19.1