Browse Source

Merge pull request #4986

6eb67b0 autofile: Disallow by-value copies of CAutoFile (Cory Fields)
eee030f autofile: don't copy CAutoFile by value (Cory Fields)
0.10
Pieter Wuille 10 years ago
parent
commit
64cfaf891f
No known key found for this signature in database
GPG Key ID: 57896D2FF8F0B657
  1. 2
      src/init.cpp
  2. 8
      src/main.cpp
  3. 4
      src/net.cpp
  4. 6
      src/serialize.h
  5. 2
      src/test/checkblock_tests.cpp

2
src/init.cpp

@ -1058,7 +1058,7 @@ bool AppInit2(boost::thread_group& threadGroup)
} }
boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME; boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
CAutoFile est_filein = CAutoFile(fopen(est_path.string().c_str(), "rb"), SER_DISK, CLIENT_VERSION); CAutoFile est_filein(fopen(est_path.string().c_str(), "rb"), SER_DISK, CLIENT_VERSION);
// Allowed to fail as this file IS missing on first startup. // Allowed to fail as this file IS missing on first startup.
if (est_filein) if (est_filein)
mempool.ReadFeeEstimates(est_filein); mempool.ReadFeeEstimates(est_filein);

8
src/main.cpp

@ -1082,7 +1082,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock
bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos) bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos)
{ {
// Open history file to append // Open history file to append
CAutoFile fileout = CAutoFile(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION); CAutoFile fileout(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION);
if (!fileout) if (!fileout)
return error("WriteBlockToDisk : OpenBlockFile failed"); return error("WriteBlockToDisk : OpenBlockFile failed");
@ -1110,7 +1110,7 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos)
block.SetNull(); block.SetNull();
// Open history file to read // Open history file to read
CAutoFile filein = CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION); CAutoFile filein(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION);
if (!filein) if (!filein)
return error("ReadBlockFromDisk : OpenBlockFile failed"); return error("ReadBlockFromDisk : OpenBlockFile failed");
@ -4503,7 +4503,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
bool CBlockUndo::WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock) bool CBlockUndo::WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock)
{ {
// Open history file to append // Open history file to append
CAutoFile fileout = CAutoFile(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION); CAutoFile fileout(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION);
if (!fileout) if (!fileout)
return error("CBlockUndo::WriteToDisk : OpenUndoFile failed"); return error("CBlockUndo::WriteToDisk : OpenUndoFile failed");
@ -4535,7 +4535,7 @@ bool CBlockUndo::WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock)
bool CBlockUndo::ReadFromDisk(const CDiskBlockPos &pos, const uint256 &hashBlock) bool CBlockUndo::ReadFromDisk(const CDiskBlockPos &pos, const uint256 &hashBlock)
{ {
// Open history file to read // Open history file to read
CAutoFile filein = CAutoFile(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION); CAutoFile filein(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION);
if (!filein) if (!filein)
return error("CBlockUndo::ReadFromDisk : OpenBlockFile failed"); return error("CBlockUndo::ReadFromDisk : OpenBlockFile failed");

4
src/net.cpp

@ -1957,7 +1957,7 @@ bool CAddrDB::Write(const CAddrMan& addr)
// open temp output file, and associate with CAutoFile // open temp output file, and associate with CAutoFile
boost::filesystem::path pathTmp = GetDataDir() / tmpfn; boost::filesystem::path pathTmp = GetDataDir() / tmpfn;
FILE *file = fopen(pathTmp.string().c_str(), "wb"); FILE *file = fopen(pathTmp.string().c_str(), "wb");
CAutoFile fileout = CAutoFile(file, SER_DISK, CLIENT_VERSION); CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
if (!fileout) if (!fileout)
return error("%s : Failed to open file %s", __func__, pathTmp.string()); return error("%s : Failed to open file %s", __func__, pathTmp.string());
@ -1982,7 +1982,7 @@ bool CAddrDB::Read(CAddrMan& addr)
{ {
// open input file, and associate with CAutoFile // open input file, and associate with CAutoFile
FILE *file = fopen(pathAddr.string().c_str(), "rb"); FILE *file = fopen(pathAddr.string().c_str(), "rb");
CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
if (!filein) if (!filein)
return error("%s : Failed to open file %s", __func__, pathAddr.string()); return error("%s : Failed to open file %s", __func__, pathAddr.string());

6
src/serialize.h

@ -1154,7 +1154,7 @@ public:
/** RAII wrapper for FILE*. /** Non-refcounted RAII wrapper for FILE*.
* *
* Will automatically close the file when it goes out of scope if not null. * Will automatically close the file when it goes out of scope if not null.
* If you're returning the file pointer, return file.release(). * If you're returning the file pointer, return file.release().
@ -1162,6 +1162,10 @@ public:
*/ */
class CAutoFile class CAutoFile
{ {
private:
// Disallow copies
CAutoFile(const CAutoFile&);
CAutoFile& operator=(const CAutoFile&);
protected: protected:
FILE* file; FILE* file;
public: public:

2
src/test/checkblock_tests.cpp

@ -35,7 +35,7 @@ bool read_block(const std::string& filename, CBlock& block)
fseek(fp, 8, SEEK_SET); // skip msgheader/size fseek(fp, 8, SEEK_SET); // skip msgheader/size
CAutoFile filein = CAutoFile(fp, SER_DISK, CLIENT_VERSION); CAutoFile filein(fp, SER_DISK, CLIENT_VERSION);
if (!filein) return false; if (!filein) return false;
filein >> block; filein >> block;

Loading…
Cancel
Save