summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Compositor.cpp14
-rw-r--r--src/debug/crash/CrashReporter.cpp2
-rw-r--r--src/helpers/MainLoopExecutor.cpp4
-rw-r--r--src/managers/eventLoop/EventLoopManager.cpp4
-rw-r--r--src/xwayland/Server.cpp5
-rw-r--r--start/src/core/Instance.cpp21
6 files changed, 36 insertions, 14 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 18d158ae..2a9b0947 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -117,8 +117,8 @@ static void handleUnrecoverableSignal(int sig) {
// Kill the program if the crash-reporter is caught in a deadlock.
signal(SIGALRM, [](int _) {
- char const* msg = "\nCrashReporter exceeded timeout, forcefully exiting\n";
- write(2, msg, strlen(msg));
+ char const* msg = "\nCrashReporter exceeded timeout, forcefully exiting\n";
+ [[maybe_unused]] auto w = write(2, msg, strlen(msg));
abort();
});
alarm(15);
@@ -550,8 +550,8 @@ void CCompositor::cleanup() {
if (!m_wlDisplay)
return;
- if (m_watchdogWriteFd.isValid())
- write(m_watchdogWriteFd.get(), "end", 3);
+ if (m_watchdogWriteFd.isValid()) [[maybe_unused]]
+ auto w = write(m_watchdogWriteFd.get(), "end", 3);
signal(SIGABRT, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
@@ -803,8 +803,10 @@ void CCompositor::startCompositor() {
Event::bus()->m_events.ready.emit();
- if (m_watchdogWriteFd.isValid())
- write(m_watchdogWriteFd.get(), "vax", 3);
+ if (m_watchdogWriteFd.isValid()) {
+ if (write(m_watchdogWriteFd.get(), "vax", 3) < 0)
+ Log::logger->log(Log::ERR, "startCompositor: failed to write to watchdogWriteFd {}: {}", m_watchdogWriteFd.get(), strerror(errno));
+ }
// This blocks until we are done.
Log::logger->log(Log::DEBUG, "Hyprland is ready, running the event loop!");
diff --git a/src/debug/crash/CrashReporter.cpp b/src/debug/crash/CrashReporter.cpp
index fad6ad21..5b7931f3 100644
--- a/src/debug/crash/CrashReporter.cpp
+++ b/src/debug/crash/CrashReporter.cpp
@@ -43,7 +43,7 @@ static char const* getRandomMessage() {
}
[[noreturn]] static inline void exitWithError(char const* err) {
- write(STDERR_FILENO, err, strlen(err));
+ [[maybe_unused]] auto w = 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.
perror("");
diff --git a/src/helpers/MainLoopExecutor.cpp b/src/helpers/MainLoopExecutor.cpp
index c7b5f910..bd17fe5d 100644
--- a/src/helpers/MainLoopExecutor.cpp
+++ b/src/helpers/MainLoopExecutor.cpp
@@ -1,6 +1,7 @@
#include "MainLoopExecutor.hpp"
#include "../managers/eventLoop/EventLoopManager.hpp"
#include "../macros.hpp"
+#include <cstring>
#include <unistd.h>
static int onDataRead(int fd, uint32_t mask, void* data) {
@@ -26,7 +27,8 @@ CMainLoopExecutor::~CMainLoopExecutor() {
void CMainLoopExecutor::signal() {
const char* amogus = "h";
- write(m_writeFd.get(), amogus, 1);
+ if (write(m_writeFd.get(), amogus, 1) < 0)
+ Log::logger->log(Log::ERR, "signal: failed to write to fd {}: {}", m_writeFd.get(), strerror(errno));
}
void CMainLoopExecutor::onFired() {
diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp
index b575bcb7..03a8d7c9 100644
--- a/src/managers/eventLoop/EventLoopManager.cpp
+++ b/src/managers/eventLoop/EventLoopManager.cpp
@@ -4,6 +4,7 @@
#include "../../config/shared/inotify/ConfigWatcher.hpp"
#include <algorithm>
+#include <cstring>
#include <limits>
#include <ranges>
@@ -41,7 +42,8 @@ static int timerWrite(int fd, uint32_t mask, void* data) {
Log::logger->log(Log::ERR, "timerWrite: triggered a non readable event on fd : {}", fd);
else {
uint64_t expirations;
- read(fd, &expirations, sizeof(expirations));
+ if (read(fd, &expirations, sizeof(expirations)) < 0)
+ Log::logger->log(Log::ERR, "timerWrite: read failed on fd {}: {}", fd, strerror(errno));
}
g_pEventLoopManager->onTimerFire();
diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp
index 9d40e1c9..b33dbfb5 100644
--- a/src/xwayland/Server.cpp
+++ b/src/xwayland/Server.cpp
@@ -222,7 +222,10 @@ bool CXWaylandServer::tryOpenSockets() {
continue;
char pidstr[12] = {0};
- read(fd.get(), pidstr, sizeof(pidstr) - 1);
+ if (read(fd.get(), pidstr, sizeof(pidstr) - 1) < 0) {
+ Log::logger->log(Log::ERR, "Failed to read on fd {}: {}", fd.get(), strerror(errno));
+ continue;
+ }
int32_t pid = 0;
try {
diff --git a/start/src/core/Instance.cpp b/start/src/core/Instance.cpp
index 2f5007bd..ef758422 100644
--- a/start/src/core/Instance.cpp
+++ b/start/src/core/Instance.cpp
@@ -81,7 +81,8 @@ void CHyprlandInstance::runHyprlandThread(bool safeMode) {
break;
}
- write(m_wakeupWrite.get(), "vax", 3);
+ if (write(m_wakeupWrite.get(), "vax", 3) < 0)
+ g_logger->log(Hyprutils::CLI::LOG_ERR, "Failed to write to wakeup fd {}: {}", m_wakeupWrite.get(), strerror(errno));
std::fflush(stdout);
std::fflush(stderr);
@@ -96,8 +97,14 @@ void CHyprlandInstance::forceQuit() {
}
void CHyprlandInstance::clearFd(const Hyprutils::OS::CFileDescriptor& fd) {
+ if (!fd.isReadable()) {
+ g_logger->log(Hyprutils::CLI::LOG_ERR, "Can't clear a unreadable fd");
+ return;
+ }
+
static std::array<char, 1024> buf;
- read(fd.get(), buf.data(), 1023);
+ if (read(fd.get(), buf.data(), 1023) < 0)
+ g_logger->log(Hyprutils::CLI::LOG_ERR, "Failed clearing fd {}: {}", fd.get(), strerror(errno));
}
void CHyprlandInstance::dispatchHyprlandEvent() {
@@ -132,12 +139,18 @@ void CHyprlandInstance::dispatchHyprlandEvent() {
bool CHyprlandInstance::run(bool safeMode) {
int pipefds[2];
- pipe(pipefds);
+ if (pipe(pipefds) != 0) {
+ g_logger->log(Hyprutils::CLI::LOG_ERR, "pipe() failed, exiting");
+ exit(1);
+ }
m_fromHlPid = CFileDescriptor{pipefds[0]};
m_toHlPid = CFileDescriptor{pipefds[1]};
- pipe(pipefds);
+ if (pipe(pipefds) != 0) {
+ g_logger->log(Hyprutils::CLI::LOG_ERR, "pipe() failed, exiting");
+ exit(1);
+ }
m_wakeupRead = CFileDescriptor{pipefds[0]};
m_wakeupWrite = CFileDescriptor{pipefds[1]};