• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SRC_NODE_DIR_H_
2 #define SRC_NODE_DIR_H_
3 
4 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5 
6 #include "node_file.h"
7 
8 namespace node {
9 
10 namespace fs_dir {
11 
12 // Needed to propagate `uv_dir_t`.
13 class DirHandle : public AsyncWrap {
14  public:
15   static DirHandle* New(Environment* env, uv_dir_t* dir);
16   ~DirHandle() override;
17 
18   static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
19   static void Read(const v8::FunctionCallbackInfo<v8::Value>& args);
20   static void Close(const v8::FunctionCallbackInfo<v8::Value>& args);
21 
dir()22   inline uv_dir_t* dir() { return dir_; }
23 
24   void MemoryInfo(MemoryTracker* tracker) const override;
25   SET_MEMORY_INFO_NAME(DirHandle)
26   SET_SELF_SIZE(DirHandle)
27 
28   DirHandle(const DirHandle&) = delete;
29   DirHandle& operator=(const DirHandle&) = delete;
30   DirHandle(const DirHandle&&) = delete;
31   DirHandle& operator=(const DirHandle&&) = delete;
32 
33  private:
34   DirHandle(Environment* env, v8::Local<v8::Object> obj, uv_dir_t* dir);
35 
36   // Synchronous close that emits a warning
37   void GCClose();
38 
39   uv_dir_t* dir_;
40   // Multiple entries are read through a single libuv call.
41   std::vector<uv_dirent_t> dirents_;
42   bool closing_ = false;
43   bool closed_ = false;
44 };
45 
46 }  // namespace fs_dir
47 
48 }  // namespace node
49 
50 #endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
51 
52 #endif  // SRC_NODE_DIR_H_
53