From 0b070886398cae6735d5b8a28fe3f305c20a54f0 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Sat, 22 Oct 2016 23:42:19 +0100 Subject: [PATCH] refs #782 Extended error information when data cache fails to write. --- src/blackmisc/atomicfile.cpp | 19 +++++++++++++++++-- src/blackmisc/datacache.cpp | 6 +++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/atomicfile.cpp b/src/blackmisc/atomicfile.cpp index 33b984353..9cc337fab 100644 --- a/src/blackmisc/atomicfile.cpp +++ b/src/blackmisc/atomicfile.cpp @@ -18,6 +18,7 @@ #if defined(Q_OS_POSIX) #include +#include #elif defined(Q_OS_WIN32) #include #endif @@ -90,13 +91,27 @@ namespace BlackMisc void CAtomicFile::replaceOriginal() { auto result = ::rename(qPrintable(fileName()), qPrintable(m_originalFilename)); - if (result < 0) { m_renameError = true; } + if (result < 0) + { + m_renameError = true; + char s[1024] {}; + auto x = strerror_r(errno, s, sizeof(s)); + setErrorString(QString::fromLocal8Bit(s)); + static_assert(std::is_same::value, "Non-standard signature of POSIX function strerror_r, check documentation."); + } } #elif defined(Q_OS_WIN32) void CAtomicFile::replaceOriginal() { auto result = MoveFileExA(qPrintable(fileName()), qPrintable(m_originalFilename), MOVEFILE_REPLACE_EXISTING); - if (! result) { m_renameError = true; } + if (! result) + { + m_renameError = true; + wchar_t *s = nullptr; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), 0, reinterpret_cast(&s), 0, nullptr); + setErrorString(QString::fromWCharArray(s)); + LocalFree(reinterpret_cast(s)); + } } #else void CAtomicFile::replaceOriginal() diff --git a/src/blackmisc/datacache.cpp b/src/blackmisc/datacache.cpp index ab7b02331..9fc166624 100644 --- a/src/blackmisc/datacache.cpp +++ b/src/blackmisc/datacache.cpp @@ -479,7 +479,7 @@ namespace BlackMisc if (! revisionFile.checkedClose()) { - CLogMessage(this).error("Failed to write to %1: %2") << revisionFile.fileName() << revisionFile.errorString(); + CLogMessage(this).error("Failed to write to %1: %2 (%3 %4)") << revisionFile.fileName() << revisionFile.errorString() << QThread::currentThread()->objectName() << Q_FUNC_INFO; } } @@ -623,7 +623,7 @@ namespace BlackMisc if (!(revisionFile.seek(0) && revisionFile.resize(0) && revisionFile.write(QJsonDocument(json).toJson()) && revisionFile.checkedClose())) { - CLogMessage(this).error("Failed to write to %1: %2") << revisionFile.fileName() << revisionFile.errorString(); + CLogMessage(this).error("Failed to write to %1: %2 (%3 %4)") << revisionFile.fileName() << revisionFile.errorString() << QThread::currentThread()->objectName() << Q_FUNC_INFO; } } m_lockFile.unlock(); @@ -776,7 +776,7 @@ namespace BlackMisc json.insert("uuid", uuid.toString()); if (!(file.seek(0) && file.resize(0) && file.write(QJsonDocument(json).toJson()) && file.checkedClose())) { - CLogMessage(this).error("Failed to write to session file %1: %2") << m_filename << file.errorString(); + CLogMessage(this).error("Failed to write to session file %1: %2 (%3 %4)") << m_filename << file.errorString() << QThread::currentThread()->objectName() << Q_FUNC_INFO; } }