aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Posen <jim.posen@gmail.com>2019-01-06 11:14:22 -0800
committerJim Posen <jim.posen@gmail.com>2019-02-22 17:38:45 -0800
commite2d2abb99fe353ffc2ff3bc1ff578fad31065335 (patch)
treed2085909eecec7d13d78cb111bc466fa4f072480 /src
parent9183d6ef656c8f3ed406821b99827f9b5f047665 (diff)
downloadbitcoin-e2d2abb99fe353ffc2ff3bc1ff578fad31065335.tar.xz
validation: Refactor OpenDiskFile into method on FlatFileSeq.
Diffstat (limited to 'src')
-rw-r--r--src/flatfile.cpp24
-rw-r--r--src/flatfile.h3
-rw-r--r--src/validation.cpp27
3 files changed, 29 insertions, 25 deletions
diff --git a/src/flatfile.cpp b/src/flatfile.cpp
index c9ca9aa869..535f4eda91 100644
--- a/src/flatfile.cpp
+++ b/src/flatfile.cpp
@@ -5,6 +5,7 @@
#include <stdexcept>
#include <flatfile.h>
+#include <logging.h>
#include <tinyformat.h>
FlatFileSeq::FlatFileSeq(fs::path dir, const char* prefix, size_t chunk_size) :
@@ -21,3 +22,26 @@ fs::path FlatFileSeq::FileName(const CDiskBlockPos& pos) const
{
return m_dir / strprintf("%s%05u.dat", m_prefix, pos.nFile);
}
+
+FILE* FlatFileSeq::Open(const CDiskBlockPos& pos, bool fReadOnly)
+{
+ if (pos.IsNull())
+ return nullptr;
+ fs::path path = FileName(pos);
+ fs::create_directories(path.parent_path());
+ FILE* file = fsbridge::fopen(path, fReadOnly ? "rb": "rb+");
+ if (!file && !fReadOnly)
+ file = fsbridge::fopen(path, "wb+");
+ if (!file) {
+ LogPrintf("Unable to open file %s\n", path.string());
+ return nullptr;
+ }
+ if (pos.nPos) {
+ if (fseek(file, pos.nPos, SEEK_SET)) {
+ LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string());
+ fclose(file);
+ return nullptr;
+ }
+ }
+ return file;
+}
diff --git a/src/flatfile.h b/src/flatfile.h
index 9c7131d201..b1eea93140 100644
--- a/src/flatfile.h
+++ b/src/flatfile.h
@@ -31,6 +31,9 @@ public:
/** Get the name of the file at the given position. */
fs::path FileName(const CDiskBlockPos& pos) const;
+
+ /** Open a handle to the file at the given position. */
+ FILE* Open(const CDiskBlockPos& pos, bool fReadOnly = false);
};
#endif // BITCOIN_FLATFILE_H
diff --git a/src/validation.cpp b/src/validation.cpp
index 3abe8b2fa1..4135063505 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -3769,29 +3769,6 @@ static void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfte
nLastBlockWeCanPrune, count);
}
-static FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly)
-{
- if (pos.IsNull())
- return nullptr;
- fs::path path = GetBlockPosFilename(pos, prefix);
- fs::create_directories(path.parent_path());
- FILE* file = fsbridge::fopen(path, fReadOnly ? "rb": "rb+");
- if (!file && !fReadOnly)
- file = fsbridge::fopen(path, "wb+");
- if (!file) {
- LogPrintf("Unable to open file %s\n", path.string());
- return nullptr;
- }
- if (pos.nPos) {
- if (fseek(file, pos.nPos, SEEK_SET)) {
- LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string());
- fclose(file);
- return nullptr;
- }
- }
- return file;
-}
-
static FlatFileSeq BlockFileSeq()
{
return FlatFileSeq(GetBlocksDir(), "blk", BLOCKFILE_CHUNK_SIZE);
@@ -3803,12 +3780,12 @@ static FlatFileSeq UndoFileSeq()
}
FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly) {
- return OpenDiskFile(pos, "blk", fReadOnly);
+ return BlockFileSeq().Open(pos, fReadOnly);
}
/** Open an undo file (rev?????.dat) */
static FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly) {
- return OpenDiskFile(pos, "rev", fReadOnly);
+ return UndoFileSeq().Open(pos, fReadOnly);
}
fs::path GetBlockPosFilename(const CDiskBlockPos &pos)