// Copyright 2019 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_NAMESPACE_LOCAL_CONNECTION_H_
#define LIB_FDIO_NAMESPACE_LOCAL_CONNECTION_H_

#include <fbl/ref_ptr.h>

#include "../internal.h"
#include "local-filesystem.h"
#include "local-vnode.h"

namespace fdio_internal {

// Create an |fdio_t| with a const view of a local node in the namespace.
//
// This object holds strong references to both the local node and local
// filesystem, which are released on |fdio_t|'s close method.
//
// On failure, nullptr is returned.
fdio_t* CreateLocalConnection(fbl::RefPtr<const fdio_namespace> fs, fbl::RefPtr<LocalVnode> vn);

// If |io| is a connection to a local Vnode, returns a reference to that LocalVnode.
//
// Otherwise, returns nullptr.
fbl::RefPtr<LocalVnode> GetLocalNodeFromConnectionIfAny(fdio_t* io);

struct DirentIteratorState {
  // The ID of the most recent vnode returned by |LocalVnode::Readdir|.
  uint64_t last_seen = 0;

  // The first directory entry is always ".", but this is emulated
  // and not an actual entry. This boolean tracks if the iterator
  // has returned the "." entry.
  bool encountered_dot = false;
};

}  // namespace fdio_internal

#endif  // LIB_FDIO_NAMESPACE_LOCAL_CONNECTION_H_
