hyprctl: use a rolling buffer for reading requests

fixes #3846
This commit is contained in:
Vaxry 2023-11-13 16:30:37 +00:00
parent 2e26542e3b
commit 016a7a9c9b

View file

@ -1385,14 +1385,14 @@ int hyprCtlFDTick(int fd, uint32_t mask, void* data) {
if (mask & WL_EVENT_ERROR || mask & WL_EVENT_HANGUP) if (mask & WL_EVENT_ERROR || mask & WL_EVENT_HANGUP)
return 0; return 0;
sockaddr_in clientAddress; sockaddr_in clientAddress;
socklen_t clientSize = sizeof(clientAddress); socklen_t clientSize = sizeof(clientAddress);
const auto ACCEPTEDCONNECTION = accept4(HyprCtl::iSocketFD, (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC); const auto ACCEPTEDCONNECTION = accept4(HyprCtl::iSocketFD, (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC);
char readBuffer[1024]; std::array<char, 1024> readBuffer;
fd_set fdset; fd_set fdset;
FD_ZERO(&fdset); FD_ZERO(&fdset);
FD_SET(ACCEPTEDCONNECTION, &fdset); FD_SET(ACCEPTEDCONNECTION, &fdset);
timeval timeout = {.tv_sec = 0, .tv_usec = 5000}; timeval timeout = {.tv_sec = 0, .tv_usec = 5000};
@ -1403,10 +1403,17 @@ int hyprCtlFDTick(int fd, uint32_t mask, void* data) {
return 0; return 0;
} }
auto messageSize = read(ACCEPTEDCONNECTION, readBuffer, 1024); std::string request;
readBuffer[messageSize == 1024 ? 1023 : messageSize] = '\0'; while (true) {
readBuffer.fill(0);
std::string request(readBuffer); auto messageSize = read(ACCEPTEDCONNECTION, readBuffer.data(), 1023);
if (messageSize < 1)
break;
std::string recvd = readBuffer.data();
request += recvd;
if (messageSize < 1023)
break;
}
std::string reply = ""; std::string reply = "";