Files
node/src/node_dir.h
James M Snell 0fac393d26 src: improve handling of internal field counting
Change suggested by bnoordhuis.

Improve handing of internal field counting by using enums.
Helps protect against future possible breakage if field
indexes are ever changed or added to.

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: https://github.com/nodejs/node/pull/31960
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2020-03-02 10:58:36 -08:00

53 lines
1.3 KiB
C++

#ifndef SRC_NODE_DIR_H_
#define SRC_NODE_DIR_H_
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#include "node_file.h"
namespace node {
namespace fs_dir {
// Needed to propagate `uv_dir_t`.
class DirHandle : public AsyncWrap {
public:
static DirHandle* New(Environment* env, uv_dir_t* dir);
~DirHandle() override;
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
static void Read(const v8::FunctionCallbackInfo<v8::Value>& args);
static void Close(const v8::FunctionCallbackInfo<v8::Value>& args);
inline uv_dir_t* dir() { return dir_; }
void MemoryInfo(MemoryTracker* tracker) const override;
SET_MEMORY_INFO_NAME(DirHandle)
SET_SELF_SIZE(DirHandle)
DirHandle(const DirHandle&) = delete;
DirHandle& operator=(const DirHandle&) = delete;
DirHandle(const DirHandle&&) = delete;
DirHandle& operator=(const DirHandle&&) = delete;
private:
DirHandle(Environment* env, v8::Local<v8::Object> obj, uv_dir_t* dir);
// Synchronous close that emits a warning
void GCClose();
uv_dir_t* dir_;
// Multiple entries are read through a single libuv call.
std::vector<uv_dirent_t> dirents_;
bool closing_ = false;
bool closed_ = false;
};
} // namespace fs_dir
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif // SRC_NODE_DIR_H_