|
|
|
@ -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()))
|
|
|
|
|