From d52a53cfcd7321f82d36d09d057e0ab265ed3521 Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 29 Jul 2023 20:45:16 +0300 Subject: [PATCH] [rpcsx-os] fix tty --- rpcsx-os/io-device.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/rpcsx-os/io-device.cpp b/rpcsx-os/io-device.cpp index 5a534ec1e..01905b900 100644 --- a/rpcsx-os/io-device.cpp +++ b/rpcsx-os/io-device.cpp @@ -87,9 +87,15 @@ static orbis::ErrorCode host_read(orbis::File *file, orbis::Uio *uio, vec.push_back({.iov_base = entry.base, .iov_len = entry.len}); } - ssize_t cnt; + ssize_t cnt = 0; if (hostFile->hostFd == 0) { - cnt = ::read(hostFile->hostFd, vec.data(), vec.size()); + for (auto io : vec) { + cnt += ::read(hostFile->hostFd, io.iov_base, io.iov_len); + + if (cnt != io.iov_len) { + break; + } + } } else { cnt = ::preadv(hostFile->hostFd, vec.data(), vec.size(), uio->offset); } @@ -110,9 +116,15 @@ static orbis::ErrorCode host_write(orbis::File *file, orbis::Uio *uio, vec.push_back({.iov_base = entry.base, .iov_len = entry.len}); } - ssize_t cnt; + ssize_t cnt = 0; if (hostFile->hostFd == 1 || hostFile->hostFd == 2) { - cnt = ::write(hostFile->hostFd, vec.data(), vec.size()); + for (auto io : vec) { + cnt += ::write(hostFile->hostFd, io.iov_base, io.iov_len); + + if (cnt != io.iov_len) { + break; + } + } } else { cnt = ::pwritev(hostFile->hostFd, vec.data(), vec.size(), uio->offset); }