aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2018-05-07 13:39:13 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2018-05-07 13:39:19 +0200
commitbd83704ec6fa9a6564cd0f489efa65c1ecb095c2 (patch)
treebb395f2c1f8af8899a872b24e8e15f6f51edc745
parent6a01a50f4906a00ce55b4e542fe850d84de54d73 (diff)
parent20ce5af4c647d9ebd97b40683bd0747383c9dc20 (diff)
Merge #13149: Handle unsuccessful fseek(...):s
20ce5af Print a log message if we fail to shrink the debug log file (practicalswift) 29c9bdc Handle unsuccessful fseek(...):s (practicalswift) Pull request description: Handle unsuccessful `fseek(...)`:s. **Note to reviewers:** What is the most appropriate course of actions for each of these unsuccessful `fseek(...)`:s? Tree-SHA512: 5b3d82dbdd15d434d3f08dcb4df62888da4df8541d2586f56a4e529083005f6782c39e10645acd1ec403da83061bbfd8dbf2dddc66e09268d410ad0918c61876
-rw-r--r--src/index/txindex.cpp4
-rw-r--r--src/logging.cpp6
-rw-r--r--src/util.cpp4
3 files changed, 11 insertions, 3 deletions
diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp
index 0bb553ee6a..5b6e0f9980 100644
--- a/src/index/txindex.cpp
+++ b/src/index/txindex.cpp
@@ -268,7 +268,9 @@ bool TxIndex::FindTx(const uint256& tx_hash, uint256& block_hash, CTransactionRe
CBlockHeader header;
try {
file >> header;
- fseek(file.Get(), postx.nTxOffset, SEEK_CUR);
+ if (fseek(file.Get(), postx.nTxOffset, SEEK_CUR)) {
+ return error("%s: fseek(...) failed", __func__);
+ }
file >> tx;
} catch (const std::exception& e) {
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
diff --git a/src/logging.cpp b/src/logging.cpp
index 60d418fdb5..e8e22cbf97 100644
--- a/src/logging.cpp
+++ b/src/logging.cpp
@@ -253,7 +253,11 @@ void BCLog::Logger::ShrinkDebugFile()
{
// Restart the file with some of the end
std::vector<char> vch(RECENT_DEBUG_HISTORY_SIZE, 0);
- fseek(file, -((long)vch.size()), SEEK_END);
+ if (fseek(file, -((long)vch.size()), SEEK_END)) {
+ LogPrintf("Failed to shrink debug log file: fseek(...) failed\n");
+ fclose(file);
+ return;
+ }
int nBytes = fread(vch.data(), 1, vch.size(), file);
fclose(file);
diff --git a/src/util.cpp b/src/util.cpp
index 9a3067259f..b4d0a61ab2 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -887,7 +887,9 @@ void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) {
// Fallback version
// TODO: just write one byte per block
static const char buf[65536] = {};
- fseek(file, offset, SEEK_SET);
+ if (fseek(file, offset, SEEK_SET)) {
+ return;
+ }
while (length > 0) {
unsigned int now = 65536;
if (length < now)