17ac8e26fSJoseph Huber //===-- GPU implementation of ftell ---------------------------------------===// 27ac8e26fSJoseph Huber // 37ac8e26fSJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47ac8e26fSJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 57ac8e26fSJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67ac8e26fSJoseph Huber // 77ac8e26fSJoseph Huber //===----------------------------------------------------------------------===// 87ac8e26fSJoseph Huber 97ac8e26fSJoseph Huber #include "src/stdio/ftell.h" 107ac8e26fSJoseph Huber #include "file.h" 115ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 127ac8e26fSJoseph Huber 135aed6d67SMichael Jones #include "hdr/types/FILE.h" 147ac8e26fSJoseph Huber 155ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 167ac8e26fSJoseph Huber 177ac8e26fSJoseph Huber LLVM_LIBC_FUNCTION(long, ftell, (::FILE * stream)) { 187ac8e26fSJoseph Huber long ret; 19*a6ef0debSJoseph Huber rpc::Client::Port port = rpc::client.open<LIBC_FSEEK>(); 207ac8e26fSJoseph Huber port.send_and_recv( 21be0c67c9SJoseph Huber [=](rpc::Buffer *buffer, uint32_t) { 22be0c67c9SJoseph Huber buffer->data[0] = file::from_stream(stream); 23be0c67c9SJoseph Huber }, 24be0c67c9SJoseph Huber [&](rpc::Buffer *buffer, uint32_t) { 25be0c67c9SJoseph Huber ret = static_cast<long>(buffer->data[0]); 26be0c67c9SJoseph Huber }); 277ac8e26fSJoseph Huber port.close(); 287ac8e26fSJoseph Huber return ret; 297ac8e26fSJoseph Huber } 307ac8e26fSJoseph Huber 315ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 32