|
|
|
@ -1146,6 +1146,32 @@ CBlockIndex* FindBlockByHeight(int nHeight)
@@ -1146,6 +1146,32 @@ CBlockIndex* FindBlockByHeight(int nHeight)
|
|
|
|
|
return vBlockIndexByHeight[nHeight]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos) |
|
|
|
|
{ |
|
|
|
|
// Open history file to append
|
|
|
|
|
CAutoFile fileout = CAutoFile(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION); |
|
|
|
|
if (!fileout) |
|
|
|
|
return error("WriteBlockToDisk() : OpenBlockFile failed"); |
|
|
|
|
|
|
|
|
|
// Write index header
|
|
|
|
|
unsigned int nSize = fileout.GetSerializeSize(block); |
|
|
|
|
fileout << FLATDATA(Params().MessageStart()) << nSize; |
|
|
|
|
|
|
|
|
|
// Write block
|
|
|
|
|
long fileOutPos = ftell(fileout); |
|
|
|
|
if (fileOutPos < 0) |
|
|
|
|
return error("WriteBlockToDisk() : ftell failed"); |
|
|
|
|
pos.nPos = (unsigned int)fileOutPos; |
|
|
|
|
fileout << block; |
|
|
|
|
|
|
|
|
|
// Flush stdio buffers and commit to disk before returning
|
|
|
|
|
fflush(fileout); |
|
|
|
|
if (!IsInitialBlockDownload()) |
|
|
|
|
FileCommit(fileout); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool CBlock::ReadFromDisk(const CBlockIndex* pindex) |
|
|
|
|
{ |
|
|
|
|
if (!ReadFromDisk(pindex->GetBlockPos())) |
|
|
|
|