[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