11e573f37SJoseph Huber //===-- GPU Implementation of fclose --------------------------------------===// 21e573f37SJoseph Huber // 31e573f37SJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41e573f37SJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 51e573f37SJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61e573f37SJoseph Huber // 71e573f37SJoseph Huber //===----------------------------------------------------------------------===// 81e573f37SJoseph Huber 91e573f37SJoseph Huber #include "src/stdio/fclose.h" 105ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 111e573f37SJoseph Huber #include "src/stdio/gpu/file.h" 121e573f37SJoseph Huber 135aed6d67SMichael Jones #include "hdr/stdio_macros.h" 145aed6d67SMichael Jones #include "hdr/types/FILE.h" 151e573f37SJoseph Huber 165ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 171e573f37SJoseph Huber 181e573f37SJoseph Huber LLVM_LIBC_FUNCTION(int, fclose, (::FILE * stream)) { 191e573f37SJoseph Huber uint64_t ret = 0; 201e573f37SJoseph Huber uintptr_t file = reinterpret_cast<uintptr_t>(stream); 21*a6ef0debSJoseph Huber rpc::Client::Port port = rpc::client.open<LIBC_CLOSE_FILE>(); 22be0c67c9SJoseph Huber port.send_and_recv( 23be0c67c9SJoseph Huber [=](rpc::Buffer *buffer, uint32_t) { buffer->data[0] = file; }, 24be0c67c9SJoseph Huber [&](rpc::Buffer *buffer, uint32_t) { ret = buffer->data[0]; }); 251e573f37SJoseph Huber port.close(); 261e573f37SJoseph Huber 271e573f37SJoseph Huber if (ret != 0) 281e573f37SJoseph Huber return EOF; 291e573f37SJoseph Huber return static_cast<int>(ret); 301e573f37SJoseph Huber } 311e573f37SJoseph Huber 325ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 33