X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Futil.cpp;h=50423427c1bf0770b83a4c851c073e6dc24bf09d;hb=628df48e0238391658dab54f81dfa1c62dbfb3ec;hp=1d0601aff93d632bc1838e98b186ec1d3d856b8d;hpb=cb5568e11bbe2d499d4d43dc30a779a5869b12ea;p=staging%2Fwindowmanager.git diff --git a/src/util.cpp b/src/util.cpp index 1d0601a..5042342 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,65 +1,37 @@ #include "util.hpp" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include -struct strftime_cache { - time_t time; - char buf[128]; -}; +#include -static void log_(char const *log_type, FILE *stream, char const *fmt, - va_list args) { - static struct strftime_cache strft; - - time_t t = time(NULL); - if (t != strft.time) { - strft.time = t; - struct tm tm; - struct tm *tmp = localtime_r(&t, &tm); - strftime(strft.buf, sizeof(strft.buf), "%Y-%m-%dT%H:%M:%S", tmp); - } - - fputs(program_invocation_short_name, stream); - fputs(" ", stream); - fputs(strft.buf, stream); - fputs(" ", stream); - fputs(log_type, stream); - fputs(" ", stream); - vfprintf(stream, fmt, args); - fputs("\n", stream); -} - -void lognotice(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("notice", stdout, fmt, a); - va_end(a); +void Poller::add_fd(int fd, std::function handler) { + pfds.emplace_back(pollfd{.fd = fd, .events = POLLIN, .revents = 0}); + handlers.emplace_back(std::move(handler)); } -void logerror(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("error", stderr, fmt, a); - va_end(a); -} - -void fatal(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("fatal", stderr, fmt, a); - va_end(a); - abort(); +int Poller::check_events() { + int ret = 0; + if ((ret = poll(this->pfds.data(), this->pfds.size(), -1)) != -1 && + errno != EINTR) { + for (unsigned i = 0; i < pfds.size(); i++) { + if ((pfds[i].revents & POLLIN) != 0) { + if (handlers[i](pfds[i].fd) == -1) { + return -1; + } + pfds[i].revents = 0; + pfds[i].events = POLLIN; + } + } + } + return ret; } -#ifdef DEBUG_OUTPUT -void logdebug(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("debug", stdout, fmt, a); - va_end(a); +unique_fd::~unique_fd() { + if (this->fd != -1) { + close(this->fd); + } } -#endif