diff --git a/userspace/libscap/engine/gvisor/runsc.cpp b/userspace/libscap/engine/gvisor/runsc.cpp index bdedd4e245..f35886bb54 100644 --- a/userspace/libscap/engine/gvisor/runsc.cpp +++ b/userspace/libscap/engine/gvisor/runsc.cpp @@ -15,12 +15,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -#include #include -#include -#include -#include +#include #include +#include +#include #include @@ -48,12 +47,21 @@ result runsc(char *argv[]) { return res; } - __gnu_cxx::stdio_filebuf filebuf(pipefds[0], std::ios::in); std::string line; - std::istream is(&filebuf); - while(std::getline(is, line)) { - res.output.emplace_back(std::string(line)); + char buf[512] = {0}; + std::stringstream ss; + size_t len; + + // Read until EOF + while((len = read(pipefds[0], buf, sizeof(buf) - 1)) != 0) { + ss << buf; + // Be smart: only reset first len bytes + memset(buf, 0, len); + } + + while(std::getline(ss, line)) { + res.output.emplace_back(line); } } else { close(pipefds[0]);