mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +01:00
validation: Refactor OpenDiskFile into method on FlatFileSeq.
This commit is contained in:
parent
9183d6ef65
commit
e2d2abb99f
3 changed files with 29 additions and 25 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <flatfile.h>
|
#include <flatfile.h>
|
||||||
|
#include <logging.h>
|
||||||
#include <tinyformat.h>
|
#include <tinyformat.h>
|
||||||
|
|
||||||
FlatFileSeq::FlatFileSeq(fs::path dir, const char* prefix, size_t chunk_size) :
|
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);
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -31,6 +31,9 @@ public:
|
||||||
|
|
||||||
/** Get the name of the file at the given position. */
|
/** Get the name of the file at the given position. */
|
||||||
fs::path FileName(const CDiskBlockPos& pos) const;
|
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
|
#endif // BITCOIN_FLATFILE_H
|
||||||
|
|
|
@ -3769,29 +3769,6 @@ static void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfte
|
||||||
nLastBlockWeCanPrune, count);
|
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()
|
static FlatFileSeq BlockFileSeq()
|
||||||
{
|
{
|
||||||
return FlatFileSeq(GetBlocksDir(), "blk", BLOCKFILE_CHUNK_SIZE);
|
return FlatFileSeq(GetBlocksDir(), "blk", BLOCKFILE_CHUNK_SIZE);
|
||||||
|
@ -3803,12 +3780,12 @@ static FlatFileSeq UndoFileSeq()
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly) {
|
FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly) {
|
||||||
return OpenDiskFile(pos, "blk", fReadOnly);
|
return BlockFileSeq().Open(pos, fReadOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Open an undo file (rev?????.dat) */
|
/** Open an undo file (rev?????.dat) */
|
||||||
static FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly) {
|
static FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly) {
|
||||||
return OpenDiskFile(pos, "rev", fReadOnly);
|
return UndoFileSeq().Open(pos, fReadOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
fs::path GetBlockPosFilename(const CDiskBlockPos &pos)
|
fs::path GetBlockPosFilename(const CDiskBlockPos &pos)
|
||||||
|
|
Loading…
Add table
Reference in a new issue