5 #ifndef FLAT_DATABASE_H 6 #define FLAT_DATABASE_H 14 #include <boost/filesystem.hpp> 55 FILE *
file = fopen(
pathDB.string().c_str(),
"wb");
58 return error(
"%s: Failed to open file %s", __func__,
pathDB.string());
64 catch (std::exception &e) {
65 return error(
"%s: Serialize or I/O error - %s", __func__, e.what());
81 FILE *
file = fopen(
pathDB.string().c_str(),
"rb");
85 error(
"%s: Failed to open file %s", __func__,
pathDB.string());
90 int fileSize = boost::filesystem::file_size(
pathDB);
91 int dataSize = fileSize -
sizeof(
uint256);
95 std::vector<unsigned char> vchData;
96 vchData.resize(dataSize);
101 filein.read((
char *)&vchData[0], dataSize);
104 catch (std::exception &e) {
105 error(
"%s: Deserialize or I/O error - %s", __func__, e.what());
114 if (hashIn != hashTmp)
116 error(
"%s: Checksum mismatch, data corrupted", __func__);
121 unsigned char pchMsgTmp[4];
122 std::string strMagicMessageTmp;
125 ssObj >> strMagicMessageTmp;
130 error(
"%s: Invalid magic message", __func__);
139 if (memcmp(pchMsgTmp,
Params().MessageStart(),
sizeof(pchMsgTmp)))
141 error(
"%s: Invalid network magic number", __func__);
148 catch (std::exception &e) {
150 error(
"%s: Deserialize or I/O error - %s", __func__, e.what());
155 LogPrintf(
" %s\n", objToLoad.ToString());
157 LogPrintf(
"%s: Cleaning....\n", __func__);
158 objToLoad.CheckAndRemove();
159 LogPrintf(
" %s\n", objToLoad.ToString());
167 CFlatDB(std::string strFilenameIn, std::string strMagicMessageIn)
180 else if (readResult !=
Ok)
185 LogPrintf(
"%s: Magic is ok but data has invalid format, will try to recreate\n", __func__);
188 LogPrintf(
"%s: File format is unknown or invalid, please fix it manually\n", __func__);
207 else if (readResult !=
Ok)
211 LogPrintf(
"%s: Magic is ok but data has invalid format, will try to recreate\n", __func__);
214 LogPrintf(
"%s: File format is unknown or invalid, please fix it manually\n", __func__);
const boost::filesystem::path & GetDataDir(bool fNetSpecific)
bool Write(const T &objToSave)
const_iterator end() const
std::string strMagicMessage
const_iterator begin() const
static bool error(const char *format)
boost::filesystem::path pathDB
uint256 Hash(const T1 pbegin, const T1 pend)
CFlatDB(std::string strFilenameIn, std::string strMagicMessageIn)
const CChainParams & Params()
static const int CLIENT_VERSION
ReadResult Read(T &objToLoad, bool fDryRun=false)