aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Woosley <ben.woosley@gmail.com>2023-03-06 17:22:33 +0100
committerTheCharlatan <seb.kung@gmail.com>2023-03-13 17:09:47 +0100
commite7333b420e35054d9302f9c58fd47b6152cbd35f (patch)
treeb7dd521363eeedcc4e2f353624facbe8cc679372
parentf7bdcfc83f5753349018be3b5a663c8923d1a5eb (diff)
downloadbitcoin-e7333b420e35054d9302f9c58fd47b6152cbd35f.tar.xz
refactor: Extract util/exception from util/system
This is a minimal extraction of a single function, but also the only use of std::exception in util/system. The background of this commit is an ongoing effort to decouple the libbitcoinkernel library from the ArgsManager defined in system.h. Moving the function out of system.h allows including it from a separate source file without including the ArgsManager definitions from system.h.
-rwxr-xr-xci/test/06_script_b.sh1
-rw-r--r--src/Makefile.am3
-rw-r--r--src/bitcoin-cli.cpp1
-rw-r--r--src/bitcoin-tx.cpp3
-rw-r--r--src/bitcoin-util.cpp1
-rw-r--r--src/bitcoin-wallet.cpp1
-rw-r--r--src/bitcoind.cpp1
-rw-r--r--src/qt/bitcoin.cpp1
-rw-r--r--src/qt/guiutil.cpp1
-rw-r--r--src/qt/initexecutor.cpp2
-rw-r--r--src/util/exception.cpp41
-rw-r--r--src/util/exception.h14
-rw-r--r--src/util/system.cpp23
-rw-r--r--src/util/system.h4
-rw-r--r--src/util/thread.cpp2
15 files changed, 69 insertions, 30 deletions
diff --git a/ci/test/06_script_b.sh b/ci/test/06_script_b.sh
index 7d47f6651c..7a01672d18 100755
--- a/ci/test/06_script_b.sh
+++ b/ci/test/06_script_b.sh
@@ -69,6 +69,7 @@ if [ "${RUN_TIDY}" = "true" ]; then
" src/util/bytevectorhash.cpp"\
" src/util/check.cpp"\
" src/util/error.cpp"\
+ " src/util/exception.cpp"\
" src/util/getuniquepath.cpp"\
" src/util/hasher.cpp"\
" src/util/message.cpp"\
diff --git a/src/Makefile.am b/src/Makefile.am
index 7dc5594cf2..a0c1670287 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -279,6 +279,7 @@ BITCOIN_CORE_H = \
util/check.h \
util/epochguard.h \
util/error.h \
+ util/exception.h \
util/fastrange.h \
util/fees.h \
util/getuniquepath.h \
@@ -699,6 +700,7 @@ libbitcoin_util_a_SOURCES = \
util/bytevectorhash.cpp \
util/check.cpp \
util/error.cpp \
+ util/exception.cpp \
util/fees.cpp \
util/getuniquepath.cpp \
util/hasher.cpp \
@@ -942,6 +944,7 @@ libbitcoinkernel_la_SOURCES = \
txmempool.cpp \
uint256.cpp \
util/check.cpp \
+ util/exception.cpp \
util/getuniquepath.cpp \
util/hasher.cpp \
util/moneystr.cpp \
diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp
index 77613f389c..eb52b30ae4 100644
--- a/src/bitcoin-cli.cpp
+++ b/src/bitcoin-cli.cpp
@@ -19,6 +19,7 @@
#include <rpc/request.h>
#include <tinyformat.h>
#include <univalue.h>
+#include <util/exception.h>
#include <util/strencodings.h>
#include <util/system.h>
#include <util/translation.h>
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
index 57ca2bbe8a..f36b6054bb 100644
--- a/src/bitcoin-tx.cpp
+++ b/src/bitcoin-tx.cpp
@@ -12,14 +12,15 @@
#include <consensus/amount.h>
#include <consensus/consensus.h>
#include <core_io.h>
-#include <key_io.h>
#include <fs.h>
+#include <key_io.h>
#include <policy/policy.h>
#include <primitives/transaction.h>
#include <script/script.h>
#include <script/sign.h>
#include <script/signingprovider.h>
#include <univalue.h>
+#include <util/exception.h>
#include <util/moneystr.h>
#include <util/rbf.h>
#include <util/strencodings.h>
diff --git a/src/bitcoin-util.cpp b/src/bitcoin-util.cpp
index 61d4b9c6f1..cf59ca9bff 100644
--- a/src/bitcoin-util.cpp
+++ b/src/bitcoin-util.cpp
@@ -14,6 +14,7 @@
#include <compat/compat.h>
#include <core_io.h>
#include <streams.h>
+#include <util/exception.h>
#include <util/system.h>
#include <util/translation.h>
#include <version.h>
diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp
index fcb845fe64..1ebe98b920 100644
--- a/src/bitcoin-wallet.cpp
+++ b/src/bitcoin-wallet.cpp
@@ -16,6 +16,7 @@
#include <logging.h>
#include <pubkey.h>
#include <tinyformat.h>
+#include <util/exception.h>
#include <util/system.h>
#include <util/translation.h>
#include <wallet/wallettool.h>
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
index b69913dddb..2ff34125e1 100644
--- a/src/bitcoind.cpp
+++ b/src/bitcoind.cpp
@@ -20,6 +20,7 @@
#include <noui.h>
#include <shutdown.h>
#include <util/check.h>
+#include <util/exception.h>
#include <util/strencodings.h>
#include <util/syscall_sandbox.h>
#include <util/syserror.h>
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 5244b72689..2c413e8b43 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -29,6 +29,7 @@
#include <qt/utilitydialog.h>
#include <qt/winshutdownmonitor.h>
#include <uint256.h>
+#include <util/exception.h>
#include <util/string.h>
#include <util/system.h>
#include <util/threadnames.h>
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 67c5295ae3..83c78d5c18 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -20,6 +20,7 @@
#include <protocol.h>
#include <script/script.h>
#include <script/standard.h>
+#include <util/exception.h>
#include <util/system.h>
#include <util/time.h>
diff --git a/src/qt/initexecutor.cpp b/src/qt/initexecutor.cpp
index b63e7ec01c..bb3f970b55 100644
--- a/src/qt/initexecutor.cpp
+++ b/src/qt/initexecutor.cpp
@@ -5,7 +5,7 @@
#include <qt/initexecutor.h>
#include <interfaces/node.h>
-#include <util/system.h>
+#include <util/exception.h>
#include <util/threadnames.h>
#include <exception>
diff --git a/src/util/exception.cpp b/src/util/exception.cpp
new file mode 100644
index 0000000000..d961f0540f
--- /dev/null
+++ b/src/util/exception.cpp
@@ -0,0 +1,41 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2023 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <util/exception.h>
+
+#include <logging.h>
+#include <tinyformat.h>
+
+#include <exception>
+#include <iostream>
+#include <string>
+#include <typeinfo>
+
+#ifdef WIN32
+#include <windows.h>
+#endif // WIN32
+
+static std::string FormatException(const std::exception* pex, std::string_view thread_name)
+{
+#ifdef WIN32
+ char pszModule[MAX_PATH] = "";
+ GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule));
+#else
+ const char* pszModule = "bitcoin";
+#endif
+ if (pex)
+ return strprintf(
+ "EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, thread_name);
+ else
+ return strprintf(
+ "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name);
+}
+
+void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name)
+{
+ std::string message = FormatException(pex, thread_name);
+ LogPrintf("\n\n************************\n%s\n", message);
+ tfm::format(std::cerr, "\n\n************************\n%s\n", message);
+}
diff --git a/src/util/exception.h b/src/util/exception.h
new file mode 100644
index 0000000000..946eb2644c
--- /dev/null
+++ b/src/util/exception.h
@@ -0,0 +1,14 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2023 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_UTIL_EXCEPTION_H
+#define BITCOIN_UTIL_EXCEPTION_H
+
+#include <exception>
+#include <string_view>
+
+void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name);
+
+#endif // BITCOIN_UTIL_EXCEPTION_H
diff --git a/src/util/system.cpp b/src/util/system.cpp
index 5b1a1659bf..98e89f82e7 100644
--- a/src/util/system.cpp
+++ b/src/util/system.cpp
@@ -792,29 +792,6 @@ std::string HelpMessageOpt(const std::string &option, const std::string &message
std::string("\n\n");
}
-static std::string FormatException(const std::exception* pex, std::string_view thread_name)
-{
-#ifdef WIN32
- char pszModule[MAX_PATH] = "";
- GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule));
-#else
- const char* pszModule = "bitcoin";
-#endif
- if (pex)
- return strprintf(
- "EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, thread_name);
- else
- return strprintf(
- "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name);
-}
-
-void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name)
-{
- std::string message = FormatException(pex, thread_name);
- LogPrintf("\n\n************************\n%s\n", message);
- tfm::format(std::cerr, "\n\n************************\n%s\n", message);
-}
-
fs::path GetDefaultDataDir()
{
// Windows: C:\Users\Username\AppData\Roaming\Bitcoin
diff --git a/src/util/system.h b/src/util/system.h
index f7bebe1f2a..2d07e64345 100644
--- a/src/util/system.h
+++ b/src/util/system.h
@@ -19,12 +19,10 @@
#include <fs.h>
#include <logging.h>
#include <sync.h>
-#include <tinyformat.h>
#include <util/settings.h>
#include <util/time.h>
#include <any>
-#include <exception>
#include <map>
#include <optional>
#include <set>
@@ -52,8 +50,6 @@ bool error(const char* fmt, const Args&... args)
return false;
}
-void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name);
-
/**
* Ensure file contents are fully committed to disk, using a platform-specific
* feature analogous to fsync().
diff --git a/src/util/thread.cpp b/src/util/thread.cpp
index e9f611bc50..f380d29f7a 100644
--- a/src/util/thread.cpp
+++ b/src/util/thread.cpp
@@ -5,7 +5,7 @@
#include <util/thread.h>
#include <logging.h>
-#include <util/system.h>
+#include <util/exception.h>
#include <util/threadnames.h>
#include <exception>