diff options
Diffstat (limited to 'src/debug')
| -rw-r--r-- | src/debug/CrashReporter.cpp | 46 | ||||
| -rw-r--r-- | src/debug/CrashReporter.hpp | 2 | ||||
| -rw-r--r-- | src/debug/HyprCtl.cpp | 33 | ||||
| -rw-r--r-- | src/debug/HyprNotificationOverlay.hpp | 2 | ||||
| -rw-r--r-- | src/debug/Log.cpp | 8 | ||||
| -rw-r--r-- | src/debug/Log.hpp | 8 | ||||
| -rw-r--r-- | src/debug/RollingLogFollow.hpp | 19 |
7 files changed, 61 insertions, 57 deletions
diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index 319c1414..30494513 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -2,8 +2,8 @@ #include <fcntl.h> #include <sys/utsname.h> #include <link.h> -#include <time.h> -#include <errno.h> +#include <ctime> +#include <cerrno> #include <sys/stat.h> #include <filesystem> @@ -31,10 +31,10 @@ static char const* const MESSAGES[] = {"Sorry, didn't mean to...", // <random> is not async-signal-safe, fake it with time(NULL) instead char const* getRandomMessage() { - return MESSAGES[time(NULL) % (sizeof(MESSAGES) / sizeof(MESSAGES[0]))]; + return MESSAGES[time(nullptr) % (sizeof(MESSAGES) / sizeof(MESSAGES[0]))]; } -[[noreturn]] inline void exit_with_error(char const* err) { +[[noreturn]] inline void exitWithError(char const* err) { write(STDERR_FILENO, err, strlen(err)); // perror() is not signal-safe, but we use it here // because if the crash-handler already crashed, it can't get any worse. @@ -42,17 +42,17 @@ char const* getRandomMessage() { abort(); } -void CrashReporter::createAndSaveCrash(int sig) { - int reportFd; +void NCrashReporter::createAndSaveCrash(int sig) { + int reportFd = -1; // We're in the signal handler, so we *only* have stack memory. // To save as much stack memory as possible, // destroy things as soon as possible. { - MaxLengthCString<255> reportPath; + CMaxLengthCString<255> reportPath; - const auto HOME = sig_getenv("HOME"); - const auto CACHE_HOME = sig_getenv("XDG_CACHE_HOME"); + const auto HOME = sigGetenv("HOME"); + const auto CACHE_HOME = sigGetenv("XDG_CACHE_HOME"); if (CACHE_HOME && CACHE_HOME[0] != '\0') { reportPath += CACHE_HOME; @@ -61,24 +61,24 @@ void CrashReporter::createAndSaveCrash(int sig) { reportPath += HOME; reportPath += "/.cache/hyprland"; } else { - exit_with_error("$CACHE_HOME and $HOME not set, nowhere to report crash\n"); + exitWithError("$CACHE_HOME and $HOME not set, nowhere to report crash\n"); return; } - int ret = mkdir(reportPath.get_str(), S_IRWXU); + int ret = mkdir(reportPath.getStr(), S_IRWXU); //__asm__("int $3"); if (ret < 0 && errno != EEXIST) { - exit_with_error("failed to mkdir() crash report directory\n"); + exitWithError("failed to mkdir() crash report directory\n"); } reportPath += "/hyprlandCrashReport"; - reportPath.write_num(getpid()); + reportPath.writeNum(getpid()); reportPath += ".txt"; { - BufFileWriter<64> stderr(2); + CBufFileWriter<64> stderr(2); stderr += "Hyprland has crashed :( Consult the crash report at "; if (!reportPath.boundsExceeded()) { - stderr += reportPath.get_str(); + stderr += reportPath.getStr(); } else { stderr += "[ERROR: Crash report path does not fit into memory! Check if your $CACHE_HOME/$HOME is too deeply nested. Max 255 characters.]"; } @@ -86,12 +86,12 @@ void CrashReporter::createAndSaveCrash(int sig) { stderr.flush(); } - reportFd = open(reportPath.get_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); + reportFd = open(reportPath.getStr(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); if (reportFd < 0) { - exit_with_error("Failed to open crash report path for writing"); + exitWithError("Failed to open crash report path for writing"); } } - BufFileWriter<512> finalCrashReport(reportFd); + CBufFileWriter<512> finalCrashReport(reportFd); finalCrashReport += "--------------------------------------------\n Hyprland Crash Report\n--------------------------------------------\n"; finalCrashReport += getRandomMessage(); @@ -100,7 +100,7 @@ void CrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "Hyprland received signal "; finalCrashReport.writeNum(sig); finalCrashReport += '('; - finalCrashReport += sig_strsignal(sig); + finalCrashReport += sigStrsignal(sig); finalCrashReport += ")\nVersion: "; finalCrashReport += GIT_COMMIT_HASH; finalCrashReport += "\nTag: "; @@ -122,9 +122,9 @@ void CrashReporter::createAndSaveCrash(int sig) { if (g_pPluginSystem && g_pPluginSystem->pluginCount() > 0) { finalCrashReport += "Hyprland seems to be running with plugins. This crash might not be Hyprland's fault.\nPlugins:\n"; - size_t count = g_pPluginSystem->pluginCount(); - CPlugin* plugins[count]; - g_pPluginSystem->sig_getPlugins(plugins, count); + size_t count = g_pPluginSystem->pluginCount(); + CPlugin* plugins[count] = {nullptr}; + g_pPluginSystem->sigGetPlugins(plugins, count); for (size_t i = 0; i < count; i++) { auto p = plugins[i]; @@ -241,5 +241,5 @@ void CrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "\n\nLog tail:\n"; - finalCrashReport += std::string_view(Debug::rollingLog).substr(Debug::rollingLog.find("\n") + 1); + finalCrashReport += std::string_view(Debug::rollingLog).substr(Debug::rollingLog.find('\n') + 1); } diff --git a/src/debug/CrashReporter.hpp b/src/debug/CrashReporter.hpp index b6750f10..0ba48e7c 100644 --- a/src/debug/CrashReporter.hpp +++ b/src/debug/CrashReporter.hpp @@ -2,6 +2,6 @@ #include "../defines.hpp" -namespace CrashReporter { +namespace NCrashReporter { void createAndSaveCrash(int sig); };
\ No newline at end of file diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 16b03386..2566a483 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -5,9 +5,9 @@ #include <fstream> #include <iterator> #include <netinet/in.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> +#include <cstdio> +#include <cstdlib> +#include <cstring> #include <sys/socket.h> #include <sys/stat.h> #include <sys/types.h> @@ -537,7 +537,7 @@ std::string configErrorsRequest(eHyprCtlOutputFormat format, std::string request CVarList errLines(currErrors, 0, '\n'); if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - for (auto line : errLines) { + for (const auto& line : errLines) { result += std::format( R"#( "{}",)#", @@ -547,7 +547,7 @@ std::string configErrorsRequest(eHyprCtlOutputFormat format, std::string request trimTrailingComma(result); result += "\n]\n"; } else { - for (auto line : errLines) { + for (const auto& line : errLines) { result += std::format("{}\n", line); } } @@ -1355,17 +1355,16 @@ std::string dispatchGetOption(eHyprCtlOutputFormat format, std::string request) return std::format("custom type: {}\nset: {}", ((ICustomConfigValueData*)std::any_cast<void*>(VAL))->toString(), VAR->m_bSetByUser); } else { if (TYPE == typeid(Hyprlang::INT)) - return std::format("{{\"option\": \"{}\", \"int\": {}, \"set\": {} }}", curitem, std::any_cast<Hyprlang::INT>(VAL), VAR->m_bSetByUser); + return std::format(R"({{"option": "{}", "int": {}, "set": {} }})", curitem, std::any_cast<Hyprlang::INT>(VAL), VAR->m_bSetByUser); else if (TYPE == typeid(Hyprlang::FLOAT)) - return std::format("{{\"option\": \"{}\", \"float\": {:2f}, \"set\": {} }}", curitem, std::any_cast<Hyprlang::FLOAT>(VAL), VAR->m_bSetByUser); + return std::format(R"({{"option": "{}", "float": {:2f}, "set": {} }})", curitem, std::any_cast<Hyprlang::FLOAT>(VAL), VAR->m_bSetByUser); else if (TYPE == typeid(Hyprlang::VEC2)) - return std::format("{{\"option\": \"{}\", \"vec2\": [{},{}], \"set\": {} }}", curitem, std::any_cast<Hyprlang::VEC2>(VAL).x, std::any_cast<Hyprlang::VEC2>(VAL).y, + return std::format(R"({{"option": "{}", "vec2": [{},{}], "set": {} }})", curitem, std::any_cast<Hyprlang::VEC2>(VAL).x, std::any_cast<Hyprlang::VEC2>(VAL).y, VAR->m_bSetByUser); else if (TYPE == typeid(Hyprlang::STRING)) - return std::format("{{\"option\": \"{}\", \"str\": \"{}\", \"set\": {} }}", curitem, escapeJSONStrings(std::any_cast<Hyprlang::STRING>(VAL)), VAR->m_bSetByUser); + return std::format(R"({{"option": "{}", "str": "{}", "set": {} }})", curitem, escapeJSONStrings(std::any_cast<Hyprlang::STRING>(VAL)), VAR->m_bSetByUser); else if (TYPE == typeid(void*)) - return std::format("{{\"option\": \"{}\", \"custom\": \"{}\", \"set\": {} }}", curitem, ((ICustomConfigValueData*)std::any_cast<void*>(VAL))->toString(), - VAR->m_bSetByUser); + return std::format(R"({{"option": "{}", "custom": "{}", "set": {} }})", curitem, ((ICustomConfigValueData*)std::any_cast<void*>(VAL))->toString(), VAR->m_bSetByUser); } return "invalid type (internal error)"; @@ -1810,13 +1809,13 @@ void runWritingDebugLogThread(const int conn) { Debug::log(LOG, "In followlog thread, got connection, start writing: {}", conn); //will be finished, when reading side close connection std::thread([conn]() { - while (Debug::RollingLogFollow::Get().IsRunning()) { - if (Debug::RollingLogFollow::Get().isEmpty(conn)) { + while (Debug::SRollingLogFollow::get().isRunning()) { + if (Debug::SRollingLogFollow::get().isEmpty(conn)) { std::this_thread::sleep_for(1000ms); continue; } - auto line = Debug::RollingLogFollow::Get().GetLog(conn); + auto line = Debug::SRollingLogFollow::get().getLog(conn); if (!successWrite(conn, line)) // We cannot write, when connection is closed. So thread will successfully exit by itself break; @@ -1824,7 +1823,7 @@ void runWritingDebugLogThread(const int conn) { std::this_thread::sleep_for(100ms); } close(conn); - Debug::RollingLogFollow::Get().StopFor(conn); + Debug::SRollingLogFollow::get().stopFor(conn); }).detach(); } @@ -1883,9 +1882,9 @@ int hyprCtlFDTick(int fd, uint32_t mask, void* data) { if (isFollowUpRollingLogRequest(request)) { Debug::log(LOG, "Followup rollinglog request received. Starting thread to write to socket."); - Debug::RollingLogFollow::Get().StartFor(ACCEPTEDCONNECTION); + Debug::SRollingLogFollow::get().startFor(ACCEPTEDCONNECTION); runWritingDebugLogThread(ACCEPTEDCONNECTION); - Debug::log(LOG, Debug::RollingLogFollow::Get().DebugInfo()); + Debug::log(LOG, Debug::SRollingLogFollow::get().debugInfo()); } else close(ACCEPTEDCONNECTION); diff --git a/src/debug/HyprNotificationOverlay.hpp b/src/debug/HyprNotificationOverlay.hpp index 67603e49..5e88ebc0 100644 --- a/src/debug/HyprNotificationOverlay.hpp +++ b/src/debug/HyprNotificationOverlay.hpp @@ -10,7 +10,7 @@ #include <cairo/cairo.h> -enum eIconBackend { +enum eIconBackend : uint8_t { ICONS_BACKEND_NONE = 0, ICONS_BACKEND_NF, ICONS_BACKEND_FA diff --git a/src/debug/Log.cpp b/src/debug/Log.cpp index 5a314833..1563628c 100644 --- a/src/debug/Log.cpp +++ b/src/debug/Log.cpp @@ -18,7 +18,7 @@ void Debug::close() { logOfs.close(); } -void Debug::log(LogLevel level, std::string str) { +void Debug::log(eLogLevel level, std::string str) { if (level == TRACE && !trace) return; @@ -26,6 +26,7 @@ void Debug::log(LogLevel level, std::string str) { return; std::string coloredStr = str; + //NOLINTBEGIN switch (level) { case LOG: str = "[LOG] " + str; @@ -53,13 +54,14 @@ void Debug::log(LogLevel level, std::string str) { break; default: break; } + //NOLINTEND rollingLog += str + "\n"; if (rollingLog.size() > ROLLING_LOG_SIZE) rollingLog = rollingLog.substr(rollingLog.size() - ROLLING_LOG_SIZE); - if (RollingLogFollow::Get().IsRunning()) - RollingLogFollow::Get().AddLog(str); + if (SRollingLogFollow::get().isRunning()) + SRollingLogFollow::get().addLog(str); if (!disableLogs || !**disableLogs) { // log to a file diff --git a/src/debug/Log.hpp b/src/debug/Log.hpp index d3190d4f..9696aa90 100644 --- a/src/debug/Log.hpp +++ b/src/debug/Log.hpp @@ -11,7 +11,7 @@ #define LOGMESSAGESIZE 1024 #define ROLLING_LOG_SIZE 4096 -enum LogLevel { +enum eLogLevel : int8_t { NONE = -1, LOG = 0, WARN, @@ -21,6 +21,7 @@ enum LogLevel { TRACE }; +// NOLINTNEXTLINE(readability-identifier-naming) namespace Debug { inline std::string logFile; inline std::ofstream logOfs; @@ -38,10 +39,11 @@ namespace Debug { void close(); // - void log(LogLevel level, std::string str); + void log(eLogLevel level, std::string str); template <typename... Args> - void log(LogLevel level, std::format_string<Args...> fmt, Args&&... args) { + //NOLINTNEXTLINE + void log(eLogLevel level, std::format_string<Args...> fmt, Args&&... args) { std::lock_guard<std::mutex> guard(logMutex); if (level == TRACE && !trace) diff --git a/src/debug/RollingLogFollow.hpp b/src/debug/RollingLogFollow.hpp index 5ff018af..0042cd8d 100644 --- a/src/debug/RollingLogFollow.hpp +++ b/src/debug/RollingLogFollow.hpp @@ -2,8 +2,9 @@ #include <shared_mutex> +// NOLINTNEXTLINE(readability-identifier-naming) namespace Debug { - struct RollingLogFollow { + struct SRollingLogFollow { std::unordered_map<int, std::string> socketToRollingLogFollowQueue; std::shared_mutex m; bool running = false; @@ -15,12 +16,12 @@ namespace Debug { return socketToRollingLogFollowQueue[socket].empty(); } - std::string DebugInfo() { + std::string debugInfo() { std::shared_lock<std::shared_mutex> r(m); return std::format("RollingLogFollow, got {} connections", socketToRollingLogFollowQueue.size()); } - std::string GetLog(int socket) { + std::string getLog(int socket) { std::unique_lock<std::shared_mutex> w(m); const std::string ret = socketToRollingLogFollowQueue[socket]; @@ -29,7 +30,7 @@ namespace Debug { return ret; }; - void AddLog(std::string log) { + void addLog(const std::string& log) { std::unique_lock<std::shared_mutex> w(m); running = true; std::vector<int> to_erase; @@ -37,26 +38,26 @@ namespace Debug { socketToRollingLogFollowQueue[p.first] += log + "\n"; } - bool IsRunning() { + bool isRunning() { std::shared_lock<std::shared_mutex> r(m); return running; } - void StopFor(int socket) { + void stopFor(int socket) { std::unique_lock<std::shared_mutex> w(m); socketToRollingLogFollowQueue.erase(socket); if (socketToRollingLogFollowQueue.empty()) running = false; } - void StartFor(int socket) { + void startFor(int socket) { std::unique_lock<std::shared_mutex> w(m); socketToRollingLogFollowQueue[socket] = std::format("[LOG] Following log to socket: {} started\n", socket); running = true; } - static RollingLogFollow& Get() { - static RollingLogFollow instance; + static SRollingLogFollow& get() { + static SRollingLogFollow instance; static std::mutex gm; std::lock_guard<std::mutex> lock(gm); return instance; |
