blob: f5300c21e7410ba0195e3c64663251f5f042b00a [file] [log] [blame]
// Copyright 2022 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_FDIO_STATE_H_
#define LIB_FDIO_FDIO_STATE_H_
#include <lib/fdio/limits.h>
#include <lib/fdio/namespace.h>
#include <sys/types.h> // mode_t
#include <array>
#include <mutex>
#include "sdk/lib/fdio/cleanpath.h"
#include "sdk/lib/fdio/fdio_slot.h"
struct fdio_state_t {
std::optional<int> bind_to_fd_locked(const fbl::RefPtr<fdio>& io) __TA_REQUIRES(lock);
std::optional<int> bind_to_fd(const fbl::RefPtr<fdio>& io) __TA_EXCLUDES(lock);
fbl::RefPtr<fdio> fd_to_io_locked(int fd) __TA_REQUIRES(lock);
fbl::RefPtr<fdio> fd_to_io(int fd) __TA_EXCLUDES(lock);
fbl::RefPtr<fdio> unbind_from_fd_locked(int fd) __TA_REQUIRES(lock);
fbl::RefPtr<fdio> unbind_from_fd(int fd) __TA_EXCLUDES(lock);
// TODO(tamird): make these private and make this a class.
std::mutex lock;
std::mutex cwd_lock __TA_ACQUIRED_BEFORE(lock);
mode_t umask __TA_GUARDED(lock);
fdio_slot root __TA_GUARDED(lock);
fdio_slot cwd __TA_GUARDED(lock);
std::array<fdio_slot, FDIO_MAX_FD> fdtab __TA_GUARDED(lock);
fdio_ns_t* ns __TA_GUARDED(lock);
fdio_internal::PathBuffer cwd_path __TA_GUARDED(cwd_lock);
};
fdio_state_t& fdio_global_state();
#endif // LIB_FDIO_FDIO_STATE_H_