Browse Source

CAutoFile: Explicit Get() and remove unused methods

Also add documentation to some methods.
0.10
Wladimir J. van der Laan 10 years ago
parent
commit
a873823864
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 4
      src/init.cpp
  2. 16
      src/main.cpp
  3. 2
      src/net.cpp
  4. 19
      src/serialize.h
  5. 2
      src/test/checkblock_tests.cpp

4
src/init.cpp

@ -139,7 +139,7 @@ void Shutdown()
{ {
boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME; boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
CAutoFile est_fileout(fopen(est_path.string().c_str(), "wb"), SER_DISK, CLIENT_VERSION); CAutoFile est_fileout(fopen(est_path.string().c_str(), "wb"), SER_DISK, CLIENT_VERSION);
if (est_fileout) if (!est_fileout.IsNull())
mempool.WriteFeeEstimates(est_fileout); mempool.WriteFeeEstimates(est_fileout);
else else
LogPrintf("%s: Failed to write fee estimates to %s\n", __func__, est_path.string()); LogPrintf("%s: Failed to write fee estimates to %s\n", __func__, est_path.string());
@ -1064,7 +1064,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(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.IsNull())
mempool.ReadFeeEstimates(est_filein); mempool.ReadFeeEstimates(est_filein);
fFeeEstimatesInitialized = true; fFeeEstimatesInitialized = true;

16
src/main.cpp

@ -1051,7 +1051,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock
CBlockHeader header; CBlockHeader header;
try { try {
file >> header; file >> header;
fseek(file, postx.nTxOffset, SEEK_CUR); fseek(file.Get(), postx.nTxOffset, SEEK_CUR);
file >> txOut; file >> txOut;
} catch (std::exception &e) { } catch (std::exception &e) {
return error("%s : Deserialize or I/O error - %s", __func__, e.what()); return error("%s : Deserialize or I/O error - %s", __func__, e.what());
@ -1114,16 +1114,16 @@ bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos)
fileout << FLATDATA(Params().MessageStart()) << nSize; fileout << FLATDATA(Params().MessageStart()) << nSize;
// Write block // Write block
long fileOutPos = ftell(fileout); long fileOutPos = ftell(fileout.Get());
if (fileOutPos < 0) if (fileOutPos < 0)
return error("WriteBlockToDisk : ftell failed"); return error("WriteBlockToDisk : ftell failed");
pos.nPos = (unsigned int)fileOutPos; pos.nPos = (unsigned int)fileOutPos;
fileout << block; fileout << block;
// Flush stdio buffers and commit to disk before returning // Flush stdio buffers and commit to disk before returning
fflush(fileout); fflush(fileout.Get());
if (!IsInitialBlockDownload()) if (!IsInitialBlockDownload())
FileCommit(fileout); FileCommit(fileout.Get());
return true; return true;
} }
@ -2843,7 +2843,7 @@ bool static LoadBlockIndexDB()
for (std::set<int>::iterator it = setBlkDataFiles.begin(); it != setBlkDataFiles.end(); it++) for (std::set<int>::iterator it = setBlkDataFiles.begin(); it != setBlkDataFiles.end(); it++)
{ {
CDiskBlockPos pos(*it, 0); CDiskBlockPos pos(*it, 0);
if (!CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION)) { if (CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION).IsNull()) {
return false; return false;
} }
} }
@ -4556,7 +4556,7 @@ bool CBlockUndo::WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock)
fileout << FLATDATA(Params().MessageStart()) << nSize; fileout << FLATDATA(Params().MessageStart()) << nSize;
// Write undo data // Write undo data
long fileOutPos = ftell(fileout); long fileOutPos = ftell(fileout.Get());
if (fileOutPos < 0) if (fileOutPos < 0)
return error("CBlockUndo::WriteToDisk : ftell failed"); return error("CBlockUndo::WriteToDisk : ftell failed");
pos.nPos = (unsigned int)fileOutPos; pos.nPos = (unsigned int)fileOutPos;
@ -4569,9 +4569,9 @@ bool CBlockUndo::WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock)
fileout << hasher.GetHash(); fileout << hasher.GetHash();
// Flush stdio buffers and commit to disk before returning // Flush stdio buffers and commit to disk before returning
fflush(fileout); fflush(fileout.Get());
if (!IsInitialBlockDownload()) if (!IsInitialBlockDownload())
FileCommit(fileout); FileCommit(fileout.Get());
return true; return true;
} }

2
src/net.cpp

@ -1939,7 +1939,7 @@ bool CAddrDB::Write(const CAddrMan& addr)
catch (std::exception &e) { catch (std::exception &e) {
return error("%s : Serialize or I/O error - %s", __func__, e.what()); return error("%s : Serialize or I/O error - %s", __func__, e.what());
} }
FileCommit(fileout); FileCommit(fileout.Get());
fileout.fclose(); fileout.fclose();
// replace existing peers.dat, if any, with new peers.dat.XXXX // replace existing peers.dat, if any, with new peers.dat.XXXX

19
src/serialize.h

@ -1116,14 +1116,21 @@ public:
} }
} }
/** Get wrapped FILE* with transfer of ownership.
* @note This will invalidate the CAutoFile object, and makes it the responsibility of the caller
* of this function to clean up the returned FILE*.
*/
FILE* release() { FILE* ret = file; file = NULL; return ret; } FILE* release() { FILE* ret = file; file = NULL; return ret; }
operator FILE*() { return file; }
FILE* operator->() { return file; }
FILE& operator*() { return *file; }
FILE** operator&() { return &file; }
FILE* operator=(FILE* pnew) { return file = pnew; }
bool IsNull() const { return (file == NULL); }
/** Get wrapped FILE* without transfer of ownership.
* @note Ownership of the FILE* will remain with this class. Use this only if the scope of the
* CAutoFile outlives use of the passed pointer.
*/
FILE* Get() const { return file; }
/** Return true if the wrapped FILE* is NULL, false otherwise.
*/
bool IsNull() const { return (file == NULL); }
// //
// Stream subset // Stream subset

2
src/test/checkblock_tests.cpp

@ -36,7 +36,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(fp, SER_DISK, CLIENT_VERSION); CAutoFile filein(fp, SER_DISK, CLIENT_VERSION);
if (!filein) return false; if (filein.IsNull()) return false;
filein >> block; filein >> block;

Loading…
Cancel
Save