From cb5530c864d89f7f4be5ff05c3288777d3db9e4a Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Wed, 5 Aug 2026 23:21:36 +0300 Subject: [PATCH] fix: writePipe loses data on partial write > PIPE_BUF --- libs/main/system/piprocess.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libs/main/system/piprocess.cpp b/libs/main/system/piprocess.cpp index 115b9a69..005b56cc 100644 --- a/libs/main/system/piprocess.cpp +++ b/libs/main/system/piprocess.cpp @@ -242,7 +242,16 @@ PRIVATE_DEFINITION_START(PIProcess) BOOL ok = WriteFile(pipes[StdIn][PipeWrite], data.data(), data.size(), &sz, NULL); if (!ok) sz = 0; # else - sz = ::write(pipes[StdIn][PipeWrite], data.data(), data.size()); + size_t offset = 0; + while (offset < data.size()) { + ssize_t wr = ::write(pipes[StdIn][PipeWrite], data.data() + offset, data.size() - offset); + if (wr < 0) { + if (errno == EINTR) continue; + return false; + } + offset += wr; + } + sz = offset; # endif return sz == (SizeType)data.size_s(); }