mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 06:58:57 +01:00
CBufferedFile: convert into a non-refcounted RAII wrapper
- it now takes over the passed file descriptor and closes it in the destructor - this fixes a leak in LoadExternalBlockFile(), where an exception could cause the file to not getting closed - disallow copies (like recently added for CAutoFile) - make nType and nVersion private
This commit is contained in:
@@ -1256,13 +1256,19 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/** Wrapper around a FILE* that implements a ring buffer to
|
||||
* deserialize from. It guarantees the ability to rewind
|
||||
* a given number of bytes. */
|
||||
/** Non-refcounted RAII wrapper around a FILE* that implements a ring buffer to
|
||||
* deserialize from. It guarantees the ability to rewind a given number of bytes. */
|
||||
class CBufferedFile
|
||||
{
|
||||
private:
|
||||
FILE *src; // source file
|
||||
// Disallow copies
|
||||
CBufferedFile(const CBufferedFile&);
|
||||
CBufferedFile& operator=(const CBufferedFile&);
|
||||
|
||||
int nType;
|
||||
int nVersion;
|
||||
|
||||
FILE *src; // source file
|
||||
uint64_t nSrcPos; // how many bytes have been read from source
|
||||
uint64_t nReadPos; // how many bytes have been read from this
|
||||
uint64_t nReadLimit; // up to which position we're allowed to read
|
||||
@@ -1289,12 +1295,18 @@ protected:
|
||||
}
|
||||
|
||||
public:
|
||||
int nType;
|
||||
int nVersion;
|
||||
|
||||
CBufferedFile(FILE *fileIn, uint64_t nBufSize, uint64_t nRewindIn, int nTypeIn, int nVersionIn) :
|
||||
src(fileIn), nSrcPos(0), nReadPos(0), nReadLimit((uint64_t)(-1)), nRewind(nRewindIn), vchBuf(nBufSize, 0),
|
||||
nType(nTypeIn), nVersion(nVersionIn) {
|
||||
nSrcPos(0), nReadPos(0), nReadLimit((uint64_t)(-1)), nRewind(nRewindIn), vchBuf(nBufSize, 0)
|
||||
{
|
||||
src = fileIn;
|
||||
nType = nTypeIn;
|
||||
nVersion = nVersionIn;
|
||||
}
|
||||
|
||||
~CBufferedFile()
|
||||
{
|
||||
if (src)
|
||||
fclose(src);
|
||||
}
|
||||
|
||||
// check whether we're at the end of the source file
|
||||
|
||||
Reference in New Issue
Block a user