17ac8e26fSJoseph Huber //===-- GPU implementation of fseek ---------------------------------------===// 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/fseek.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(int, fseek, (::FILE * stream, long offset, int whence)) { 187ac8e26fSJoseph Huber int 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) { 227ac8e26fSJoseph Huber buffer->data[0] = file::from_stream(stream); 237ac8e26fSJoseph Huber buffer->data[1] = static_cast<uint64_t>(offset); 247ac8e26fSJoseph Huber buffer->data[2] = static_cast<uint64_t>(whence); 257ac8e26fSJoseph Huber }, 26be0c67c9SJoseph Huber [&](rpc::Buffer *buffer, uint32_t) { 27be0c67c9SJoseph Huber ret = static_cast<int>(buffer->data[0]); 28be0c67c9SJoseph Huber }); 297ac8e26fSJoseph Huber port.close(); 307ac8e26fSJoseph Huber return ret; 317ac8e26fSJoseph Huber } 327ac8e26fSJoseph Huber 335ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 34