diff --git a/daemon/src/history/history.cpp b/daemon/src/history/history.cpp index d1590345ba86eaaa6c9fbd33cdde8ff6e819d032..1f9f8c1e86de8ec7ecfacb6b2d629badd57649e2 100644 --- a/daemon/src/history/history.cpp +++ b/daemon/src/history/history.cpp @@ -105,7 +105,8 @@ void History::ensurePath() if (mkdir(userdata.data(), 0755) != 0) { // If directory creation failed if (errno != EEXIST) { - DEBUG("Cannot create directory: %s!: %s", userdata.c_str(), strerror(errno)); + DEBUG("Cannot create directory: %s", userdata.c_str()); + Logger::strErr(); return; } } diff --git a/daemon/src/logger.cpp b/daemon/src/logger.cpp index 7ba7e5453ff8d34046e2c8237ae1353281be6e2b..9a421c9a9916d3df955f947d62a24970082cbd5a 100644 --- a/daemon/src/logger.cpp +++ b/daemon/src/logger.cpp @@ -85,4 +85,27 @@ bool getDebugMode() { return debugMode; } + +void strErr() +{ +#ifdef __GLIBC__ + ERROR("%m"); +#else + char buf[1000]; + const char *msg; + + switch (strerror_r(error, buf, sizeof(buf))) { + case 0: + msg = buf; + break; + case ERANGE: /* should never happen */ + msg = "unknown (too big to display)"; + break; + default: + msg = "unknown (invalid error number)"; + break; + } + ERROR("%s", msg); +#endif +} } diff --git a/daemon/src/logger.h b/daemon/src/logger.h index 5321666241df6cd664b73d246bde351cf37dc68c..54ffab9f6e11807644924ee979b7bf37bf83dbc3 100644 --- a/daemon/src/logger.h +++ b/daemon/src/logger.h @@ -45,6 +45,7 @@ void log(const int, const char*, ...); void setConsoleLog(bool); void setDebugMode(bool); bool getDebugMode(); +void strErr(); }; #define LOG_FORMAT(M, ...) "%s:%d:0x%x: " M, FILE_NAME, __LINE__, (unsigned long) pthread_self() & 0xffff, ##__VA_ARGS__ diff --git a/daemon/src/video/shm_sink.cpp b/daemon/src/video/shm_sink.cpp index 2fbb7f28c52c83eec7e1e71742c9a5d7de61108b..7d6fa72afc8a621a67ef741e85750096b658d26c 100644 --- a/daemon/src/video/shm_sink.cpp +++ b/daemon/src/video/shm_sink.cpp @@ -79,8 +79,8 @@ bool SHMSink::start() if (not shm_name_.empty()) { fd_ = shm_open(shm_name_.c_str(), flags, perms); if (fd_ < 0) { - ERROR("could not open shm area \"%s\", shm_open failed:%s", shm_name_.c_str(), strerror(errno)); - perror(strerror(errno)); + ERROR("could not open shm area \"%s\"", shm_name_.c_str()); + Logger::strErr(); return false; } } else { @@ -90,7 +90,7 @@ bool SHMSink::start() shm_name_ = name.str(); fd_ = shm_open(shm_name_.c_str(), flags, perms); if (fd_ < 0 and errno != EEXIST) { - ERROR("%s", strerror(errno)); + Logger::strErr(); return false; } } @@ -103,7 +103,7 @@ bool SHMSink::start() if (ftruncate(fd_, shm_area_len_)) { ERROR("Could not make shm area large enough for header"); - perror(strerror(errno)); + Logger::strErr(); return false; } @@ -128,8 +128,9 @@ bool SHMSink::start() bool SHMSink::stop() { - if (fd_ >= 0) - close(fd_); + if (fd_ >= 0 and close(fd_) == -1) + Logger::strErr(); + fd_ = -1; if (not opened_name_.empty()) { @@ -154,13 +155,13 @@ bool SHMSink::resize_area(size_t desired_length) if (munmap(shm_area_, shm_area_len_)) { ERROR("Could not unmap shared area"); - perror(strerror(errno)); + Logger::strErr(); return false; } if (ftruncate(fd_, desired_length)) { ERROR("Could not resize shared area"); - perror(strerror(errno)); + Logger::strErr(); return false; } diff --git a/daemon/src/video/socket_pair.cpp b/daemon/src/video/socket_pair.cpp index 37bdf2748d0c8532ff8a367b62680b0532699f49..d91cac80aae3fc51c101da65c60981dfd0eebde1 100644 --- a/daemon/src/video/socket_pair.cpp +++ b/daemon/src/video/socket_pair.cpp @@ -116,7 +116,8 @@ int udp_socket_create(sockaddr_storage *addr, socklen_t *addr_len, // bind socket so that we send from and receive // on local port if (bind(udp_fd, reinterpret_cast<sockaddr*>(addr), *addr_len) < 0) { - ERROR("Bind failed: %s", strerror(errno)); + ERROR("Bind failed"); + Logger::strErr(); close(udp_fd); udp_fd = -1; } @@ -160,9 +161,9 @@ void SocketPair::interrupt() void SocketPair::closeSockets() { if (rtcpHandle_ > 0 and close(rtcpHandle_)) - ERROR("%s", strerror(errno)); + Logger::strErr(); if (rtpHandle_ > 0 and close(rtpHandle_)) - ERROR("%s", strerror(errno)); + Logger::strErr(); } void SocketPair::openSockets(const char *uri, int local_rtp_port)