blob: 328608becebfbff702ee5d51f3357c57413cea1e [file] [log] [blame] [edit]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIB_FDIO_ZXIO_H_
#define LIB_FDIO_ZXIO_H_
#include <lib/zxio/inception.h>
#include "internal.h"
namespace fdio_internal {
struct zxio : public base {
zx_status_t close() override;
zx_status_t clone(zx_handle_t* out_handle) override;
zx_status_t unwrap(zx_handle_t* out_handle) override;
void wait_begin(uint32_t events, zx_handle_t* out_handle, zx_signals_t* out_signals) override;
void wait_end(zx_signals_t signals, uint32_t* out_events) override;
zx_status_t get_token(zx_handle_t* out) override;
zx_status_t get_attr(zxio_node_attributes_t* out) override;
zx_status_t set_attr(const zxio_node_attributes_t* attr) override;
zx_status_t dirent_iterator_init(zxio_dirent_iterator_t* iterator, zxio_t* directory) override;
zx_status_t dirent_iterator_next(zxio_dirent_iterator_t* iterator,
zxio_dirent_t** out_entry) override;
void dirent_iterator_destroy(zxio_dirent_iterator_t* iterator) override;
zx_status_t unlink(const char* path, size_t len) override;
zx_status_t truncate(off_t off) override;
zx_status_t rename(const char* src, size_t srclen, zx_handle_t dst_token, const char* dst,
size_t dstlen) override;
zx_status_t link(const char* src, size_t srclen, zx_handle_t dst_token, const char* dst,
size_t dstlen) override;
zx_status_t get_flags(uint32_t* out_flags) override;
zx_status_t set_flags(uint32_t flags) override;
zx_status_t recvmsg(struct msghdr* msg, int flags, size_t* out_actual,
int16_t* out_code) override;
zx_status_t sendmsg(const struct msghdr* msg, int flags, size_t* out_actual,
int16_t* out_code) override;
protected:
friend class AllocHelper<zxio>;
zxio() = default;
~zxio() override = default;
void wait_begin_inner(uint32_t events, zx_signals_t signals, zx_handle_t* out_handle,
zx_signals_t* out_signals);
void wait_end_inner(zx_signals_t signals, uint32_t* out_events, zx_signals_t* out_signals);
zx_status_t recvmsg_inner(struct msghdr* msg, int flags, size_t* out_actual);
zx_status_t sendmsg_inner(const struct msghdr* msg, int flags, size_t* out_actual);
};
struct pipe : public zxio {
Errno posix_ioctl(int request, va_list va) override;
zx_status_t shutdown(int how, int16_t* out_code) override;
protected:
friend class AllocHelper<pipe>;
pipe() = default;
~pipe() override = default;
const zxio_pipe_t& zxio_pipe();
static Errno posix_ioctl_inner(const zx::socket& socket, int request, va_list va);
static zx_status_t shutdown_inner(const zx::socket& socket, int how);
};
} // namespace fdio_internal
#endif // LIB_FDIO_ZXIO_H_