[libc-commits] [libc] a42c1f8 - [libc][Obvious] Fix use of `fwrite` in the RPC server
Joseph Huber via libc-commits
libc-commits at lists.llvm.org
Wed Jul 26 09:15:37 PDT 2023
Author: Joseph Huber
Date: 2023-07-26T11:13:38-05:00
New Revision: a42c1f8d9734b732685f91e5e933d6cf8482c708
URL: https://github.com/llvm/llvm-project/commit/a42c1f8d9734b732685f91e5e933d6cf8482c708
DIFF: https://github.com/llvm/llvm-project/commit/a42c1f8d9734b732685f91e5e933d6cf8482c708.diff
LOG: [libc][Obvious] Fix use of `fwrite` in the RPC server
Summary:
The RPC server used the size field which meant we didn't get the correct
return value for partial reads. We fix that here.
Added:
Modified:
libc/src/__support/File/gpu/file.cpp
libc/utils/gpu/server/rpc_server.cpp
Removed:
################################################################################
diff --git a/libc/src/__support/File/gpu/file.cpp b/libc/src/__support/File/gpu/file.cpp
index b3a436ea47579d..dd4ff4a2fc17a6 100644
--- a/libc/src/__support/File/gpu/file.cpp
+++ b/libc/src/__support/File/gpu/file.cpp
@@ -38,36 +38,36 @@ class GPUFile : public File {
namespace {
int write_to_stdout(const void *data, size_t size) {
- int ret = 0;
+ uint64_t ret = 0;
rpc::Client::Port port = rpc::client.open<RPC_WRITE_TO_STDOUT>();
port.send_n(data, size);
port.recv([&](rpc::Buffer *buffer) {
- ret = reinterpret_cast<int *>(buffer->data)[0];
+ ret = reinterpret_cast<uint64_t *>(buffer->data)[0];
});
port.close();
return ret;
}
int write_to_stderr(const void *data, size_t size) {
- int ret = 0;
+ uint64_t ret = 0;
rpc::Client::Port port = rpc::client.open<RPC_WRITE_TO_STDERR>();
port.send_n(data, size);
port.recv([&](rpc::Buffer *buffer) {
- ret = reinterpret_cast<int *>(buffer->data)[0];
+ ret = reinterpret_cast<uint64_t *>(buffer->data)[0];
});
port.close();
return ret;
}
int write_to_stream(uintptr_t file, const void *data, size_t size) {
- int ret = 0;
+ uint64_t ret = 0;
rpc::Client::Port port = rpc::client.open<RPC_WRITE_TO_STREAM>();
port.send([&](rpc::Buffer *buffer) {
reinterpret_cast<uintptr_t *>(buffer->data)[0] = file;
});
port.send_n(data, size);
port.recv([&](rpc::Buffer *buffer) {
- ret = reinterpret_cast<int *>(buffer->data)[0];
+ ret = reinterpret_cast<uint64_t *>(buffer->data)[0];
});
port.close();
return ret;
diff --git a/libc/utils/gpu/server/rpc_server.cpp b/libc/utils/gpu/server/rpc_server.cpp
index 49f8d98a043df8..7ea9bbc8dd9a84 100644
--- a/libc/utils/gpu/server/rpc_server.cpp
+++ b/libc/utils/gpu/server/rpc_server.cpp
@@ -94,9 +94,8 @@ struct Server {
? stdout
: (port->get_opcode() == RPC_WRITE_TO_STDERR ? stderr
: files[id]);
- int ret = fwrite(strs[id], sizes[id], 1, file);
- ret = ret >= 0 ? sizes[id] : ret;
- std::memcpy(buffer->data, &ret, sizeof(int));
+ uint64_t ret = fwrite(strs[id], 1, sizes[id], file);
+ std::memcpy(buffer->data, &ret, sizeof(uint64_t));
});
for (uint64_t i = 0; i < rpc::MAX_LANE_SIZE; ++i) {
if (strs[i])
More information about the libc-commits
mailing list