Coverage Report

Created: 2026-01-21 08:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/node/src/node_file-inl.h
Line
Count
Source
1
#ifndef SRC_NODE_FILE_INL_H_
2
#define SRC_NODE_FILE_INL_H_
3
4
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
6
#include "node_file.h"
7
#include "req_wrap-inl.h"
8
9
namespace node {
10
namespace fs {
11
12
FSContinuationData::FSContinuationData(uv_fs_t* req, int mode, uv_fs_cb done_cb)
13
0
  : done_cb_(done_cb), req_(req), mode_(mode) {
14
0
}
15
16
0
void FSContinuationData::PushPath(std::string&& path) {
17
0
  paths_.emplace_back(std::move(path));
18
0
}
19
20
0
void FSContinuationData::PushPath(const std::string& path) {
21
0
  paths_.push_back(path);
22
0
}
23
24
0
void FSContinuationData::MaybeSetFirstPath(const std::string& path) {
25
0
  if (first_path_.empty()) {
26
0
    first_path_ = path;
27
0
  }
28
0
}
29
30
0
std::string FSContinuationData::PopPath() {
31
0
  CHECK(!paths_.empty());
32
0
  std::string path = std::move(paths_.back());
33
0
  paths_.pop_back();
34
0
  return path;
35
0
}
36
37
0
void FSContinuationData::Done(int result) {
38
0
  req_->result = result;
39
0
  done_cb_(req_);
40
0
}
41
42
FSReqBase::FSReqBase(BindingData* binding_data,
43
                     v8::Local<v8::Object> req,
44
                     AsyncWrap::ProviderType type,
45
                     bool use_bigint)
46
0
  : ReqWrap(binding_data->env(), req, type),
47
0
    use_bigint_(use_bigint),
48
0
    binding_data_(binding_data) {
49
0
}
50
51
void FSReqBase::Init(const char* syscall,
52
                     const char* data,
53
                     size_t len,
54
0
                     enum encoding encoding) {
55
0
  syscall_ = syscall;
56
0
  encoding_ = encoding;
57
58
0
  if (data != nullptr) {
59
0
    CHECK(!has_data_);
60
0
    buffer_.AllocateSufficientStorage(len + 1);
61
0
    buffer_.SetLengthAndZeroTerminate(len);
62
0
    memcpy(*buffer_, data, len);
63
0
    has_data_ = true;
64
0
  }
65
0
}
66
67
FSReqBase::FSReqBuffer&
68
0
FSReqBase::Init(const char* syscall, size_t len, enum encoding encoding) {
69
0
  syscall_ = syscall;
70
0
  encoding_ = encoding;
71
72
0
  buffer_.AllocateSufficientStorage(len + 1);
73
0
  has_data_ = false;  // so that the data does not show up in error messages
74
0
  return buffer_;
75
0
}
76
77
FSReqCallback::FSReqCallback(BindingData* binding_data,
78
                             v8::Local<v8::Object> req,
79
                             bool use_bigint)
80
0
  : FSReqBase(binding_data,
81
0
              req,
82
0
              AsyncWrap::PROVIDER_FSREQCALLBACK,
83
0
              use_bigint) {}
84
85
template <typename NativeT, typename V8T>
86
void FillStatsArray(AliasedBufferBase<NativeT, V8T>* fields,
87
                    const uv_stat_t* s,
88
0
                    const size_t offset) {
89
0
#define SET_FIELD_WITH_STAT(stat_offset, stat)                                 \
90
0
  fields->SetValue(offset + static_cast<size_t>(FsStatsOffset::stat_offset),   \
91
0
                   static_cast<NativeT>(stat))
92
93
// On win32, time is stored in uint64_t and starts from 1601-01-01.
94
// libuv calculates tv_sec and tv_nsec from it and converts to signed long,
95
// which causes Y2038 overflow. On the other platforms it is safe to treat
96
// negative values as pre-epoch time.
97
#ifdef _WIN32
98
#define SET_FIELD_WITH_TIME_STAT(stat_offset, stat)                            \
99
  /* NOLINTNEXTLINE(runtime/int) */                                            \
100
  SET_FIELD_WITH_STAT(stat_offset, static_cast<unsigned long>(stat))
101
#else
102
0
#define SET_FIELD_WITH_TIME_STAT(stat_offset, stat)                            \
103
0
  SET_FIELD_WITH_STAT(stat_offset, static_cast<double>(stat))
104
0
#endif  // _WIN32
105
106
0
  SET_FIELD_WITH_STAT(kDev, s->st_dev);
107
0
  SET_FIELD_WITH_STAT(kMode, s->st_mode);
108
0
  SET_FIELD_WITH_STAT(kNlink, s->st_nlink);
109
0
  SET_FIELD_WITH_STAT(kUid, s->st_uid);
110
0
  SET_FIELD_WITH_STAT(kGid, s->st_gid);
111
0
  SET_FIELD_WITH_STAT(kRdev, s->st_rdev);
112
0
  SET_FIELD_WITH_STAT(kBlkSize, s->st_blksize);
113
0
  SET_FIELD_WITH_STAT(kIno, s->st_ino);
114
0
  SET_FIELD_WITH_STAT(kSize, s->st_size);
115
0
  SET_FIELD_WITH_STAT(kBlocks, s->st_blocks);
116
117
0
  SET_FIELD_WITH_TIME_STAT(kATimeSec, s->st_atim.tv_sec);
118
0
  SET_FIELD_WITH_TIME_STAT(kATimeNsec, s->st_atim.tv_nsec);
119
0
  SET_FIELD_WITH_TIME_STAT(kMTimeSec, s->st_mtim.tv_sec);
120
0
  SET_FIELD_WITH_TIME_STAT(kMTimeNsec, s->st_mtim.tv_nsec);
121
0
  SET_FIELD_WITH_TIME_STAT(kCTimeSec, s->st_ctim.tv_sec);
122
0
  SET_FIELD_WITH_TIME_STAT(kCTimeNsec, s->st_ctim.tv_nsec);
123
0
  SET_FIELD_WITH_TIME_STAT(kBirthTimeSec, s->st_birthtim.tv_sec);
124
0
  SET_FIELD_WITH_TIME_STAT(kBirthTimeNsec, s->st_birthtim.tv_nsec);
125
126
0
#undef SET_FIELD_WITH_TIME_STAT
127
0
#undef SET_FIELD_WITH_STAT
128
0
}
Unexecuted instantiation: void node::fs::FillStatsArray<long, v8::BigInt64Array>(node::AliasedBufferBase<long, v8::BigInt64Array>*, uv_stat_t const*, unsigned long)
Unexecuted instantiation: void node::fs::FillStatsArray<double, v8::Float64Array>(node::AliasedBufferBase<double, v8::Float64Array>*, uv_stat_t const*, unsigned long)
129
130
v8::Local<v8::Value> FillGlobalStatsArray(BindingData* binding_data,
131
                                          const bool use_bigint,
132
                                          const uv_stat_t* s,
133
0
                                          const bool second) {
134
0
  const ptrdiff_t offset =
135
0
      second ? static_cast<ptrdiff_t>(FsStatsOffset::kFsStatsFieldsNumber) : 0;
136
0
  if (use_bigint) {
137
0
    auto* const arr = &binding_data->stats_field_bigint_array;
138
0
    FillStatsArray(arr, s, offset);
139
0
    return arr->GetJSArray();
140
0
  } else {
141
0
    auto* const arr = &binding_data->stats_field_array;
142
0
    FillStatsArray(arr, s, offset);
143
0
    return arr->GetJSArray();
144
0
  }
145
0
}
146
147
template <typename NativeT, typename V8T>
148
void FillStatFsArray(AliasedBufferBase<NativeT, V8T>* fields,
149
0
                     const uv_statfs_t* s) {
150
0
#define SET_FIELD(field, stat)                                                 \
151
0
  fields->SetValue(static_cast<size_t>(FsStatFsOffset::field),                 \
152
0
                   static_cast<NativeT>(stat))
153
154
0
  SET_FIELD(kType, s->f_type);
155
0
  SET_FIELD(kBSize, s->f_bsize);
156
0
  SET_FIELD(kBlocks, s->f_blocks);
157
0
  SET_FIELD(kBFree, s->f_bfree);
158
0
  SET_FIELD(kBAvail, s->f_bavail);
159
0
  SET_FIELD(kFiles, s->f_files);
160
0
  SET_FIELD(kFFree, s->f_ffree);
161
162
0
#undef SET_FIELD
163
0
}
Unexecuted instantiation: void node::fs::FillStatFsArray<long, v8::BigInt64Array>(node::AliasedBufferBase<long, v8::BigInt64Array>*, uv_statfs_s const*)
Unexecuted instantiation: void node::fs::FillStatFsArray<double, v8::Float64Array>(node::AliasedBufferBase<double, v8::Float64Array>*, uv_statfs_s const*)
164
165
v8::Local<v8::Value> FillGlobalStatFsArray(BindingData* binding_data,
166
                                           const bool use_bigint,
167
0
                                           const uv_statfs_t* s) {
168
0
  if (use_bigint) {
169
0
    auto* const arr = &binding_data->statfs_field_bigint_array;
170
0
    FillStatFsArray(arr, s);
171
0
    return arr->GetJSArray();
172
0
  } else {
173
0
    auto* const arr = &binding_data->statfs_field_array;
174
0
    FillStatFsArray(arr, s);
175
0
    return arr->GetJSArray();
176
0
  }
177
0
}
178
179
template <typename AliasedBufferT>
180
FSReqPromise<AliasedBufferT>*
181
FSReqPromise<AliasedBufferT>::New(BindingData* binding_data,
182
0
                                  bool use_bigint) {
183
0
  Environment* env = binding_data->env();
184
0
  v8::Local<v8::Object> obj;
185
0
  if (!env->fsreqpromise_constructor_template()
186
0
           ->NewInstance(env->context())
187
0
           .ToLocal(&obj)) {
188
0
    return nullptr;
189
0
  }
190
0
  v8::Local<v8::Promise::Resolver> resolver;
191
0
  if (!v8::Promise::Resolver::New(env->context()).ToLocal(&resolver) ||
192
0
      obj->Set(env->context(), env->promise_string(), resolver).IsNothing()) {
193
0
    return nullptr;
194
0
  }
195
0
  return new FSReqPromise(binding_data, obj, use_bigint);
196
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::New(node::fs::BindingData*, bool)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::New(node::fs::BindingData*, bool)
197
198
template <typename AliasedBufferT>
199
0
FSReqPromise<AliasedBufferT>::~FSReqPromise() {
200
  // Validate that the promise was explicitly resolved or rejected but only if
201
  // the Isolate is not terminating because in this case the promise might have
202
  // not finished.
203
0
  CHECK_IMPLIES(!finished_, !env()->can_call_into_js());
204
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::~FSReqPromise()
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::~FSReqPromise()
205
206
template <typename AliasedBufferT>
207
FSReqPromise<AliasedBufferT>::FSReqPromise(BindingData* binding_data,
208
                                           v8::Local<v8::Object> obj,
209
                                           bool use_bigint)
210
0
    : FSReqBase(
211
0
          binding_data, obj, AsyncWrap::PROVIDER_FSREQPROMISE, use_bigint),
212
0
      stats_field_array_(
213
0
          env()->isolate(),
214
0
          static_cast<size_t>(FsStatsOffset::kFsStatsFieldsNumber)),
215
0
      statfs_field_array_(
216
0
          env()->isolate(),
217
0
          static_cast<size_t>(FsStatFsOffset::kFsStatFsFieldsNumber)) {}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::FSReqPromise(node::fs::BindingData*, v8::Local<v8::Object>, bool)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::FSReqPromise(node::fs::BindingData*, v8::Local<v8::Object>, bool)
218
219
template <typename AliasedBufferT>
220
0
void FSReqPromise<AliasedBufferT>::Reject(v8::Local<v8::Value> reject) {
221
0
  finished_ = true;
222
0
  v8::HandleScope scope(env()->isolate());
223
0
  InternalCallbackScope callback_scope(this);
224
0
  v8::Local<v8::Value> value;
225
0
  if (!object()
226
0
           ->Get(env()->context(), env()->promise_string())
227
0
           .ToLocal(&value)) {
228
    // If we hit this, getting the value from the object failed and
229
    // an error was likely scheduled. We could try to reject the promise
230
    // but let's just allow the error to propagate.
231
0
    return;
232
0
  }
233
0
  v8::Local<v8::Promise::Resolver> resolver = value.As<v8::Promise::Resolver>();
234
0
  USE(resolver->Reject(env()->context(), reject).FromJust());
235
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::Reject(v8::Local<v8::Value>)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::Reject(v8::Local<v8::Value>)
236
237
template <typename AliasedBufferT>
238
0
void FSReqPromise<AliasedBufferT>::Resolve(v8::Local<v8::Value> value) {
239
0
  finished_ = true;
240
0
  v8::HandleScope scope(env()->isolate());
241
0
  InternalCallbackScope callback_scope(this);
242
0
  v8::Local<v8::Value> val;
243
0
  if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
244
    // If we hit this, getting the value from the object failed and
245
    // an error was likely scheduled. We could try to reject the promise
246
    // but let's just allow the error to propagate.
247
0
    return;
248
0
  }
249
0
  v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
250
0
  USE(resolver->Resolve(env()->context(), value).FromJust());
251
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::Resolve(v8::Local<v8::Value>)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::Resolve(v8::Local<v8::Value>)
252
253
template <typename AliasedBufferT>
254
0
void FSReqPromise<AliasedBufferT>::ResolveStat(const uv_stat_t* stat) {
255
0
  FillStatsArray(&stats_field_array_, stat);
256
0
  Resolve(stats_field_array_.GetJSArray());
257
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::ResolveStat(uv_stat_t const*)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::ResolveStat(uv_stat_t const*)
258
259
template <typename AliasedBufferT>
260
0
void FSReqPromise<AliasedBufferT>::ResolveStatFs(const uv_statfs_t* stat) {
261
0
  FillStatFsArray(&statfs_field_array_, stat);
262
0
  Resolve(statfs_field_array_.GetJSArray());
263
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::ResolveStatFs(uv_statfs_s const*)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::ResolveStatFs(uv_statfs_s const*)
264
265
template <typename AliasedBufferT>
266
void FSReqPromise<AliasedBufferT>::SetReturnValue(
267
0
    const v8::FunctionCallbackInfo<v8::Value>& args) {
268
0
  v8::Local<v8::Value> val;
269
0
  if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
270
    // If we hit this, getting the value from the object failed and
271
    // an error was likely scheduled. We could try to reject the promise
272
    // but let's just allow the error to propagate.
273
0
    return;
274
0
  }
275
0
  v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
276
0
  args.GetReturnValue().Set(resolver->GetPromise());
277
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::SetReturnValue(v8::FunctionCallbackInfo<v8::Value> const&)
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::SetReturnValue(v8::FunctionCallbackInfo<v8::Value> const&)
278
279
template <typename AliasedBufferT>
280
0
void FSReqPromise<AliasedBufferT>::MemoryInfo(MemoryTracker* tracker) const {
281
0
  FSReqBase::MemoryInfo(tracker);
282
0
  tracker->TrackField("stats_field_array", stats_field_array_);
283
0
  tracker->TrackField("statfs_field_array", statfs_field_array_);
284
0
}
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::MemoryInfo(node::MemoryTracker*) const
285
286
FSReqBase* GetReqWrap(const v8::FunctionCallbackInfo<v8::Value>& args,
287
                      int index,
288
0
                      bool use_bigint) {
289
0
  v8::Local<v8::Value> value = args[index];
290
0
  FSReqBase* result = nullptr;
291
0
  if (value->IsObject()) {
292
0
    result = BaseObject::Unwrap<FSReqBase>(value.As<v8::Object>());
293
0
  } else {
294
0
    Realm* realm = Realm::GetCurrent(args);
295
0
    BindingData* binding_data = realm->GetBindingData<BindingData>();
296
297
0
    if (value->StrictEquals(realm->isolate_data()->fs_use_promises_symbol())) {
298
0
      if (use_bigint) {
299
0
        result =
300
0
            FSReqPromise<AliasedBigInt64Array>::New(binding_data, use_bigint);
301
0
      } else {
302
0
        result =
303
0
            FSReqPromise<AliasedFloat64Array>::New(binding_data, use_bigint);
304
0
      }
305
0
    }
306
0
  }
307
0
  if (result != nullptr) {
308
0
    result->SetReturnValue(args);
309
0
  }
310
0
  return result;
311
0
}
312
313
// Returns nullptr if the operation fails from the start.
314
template <typename Func, typename... Args>
315
FSReqBase* AsyncDestCall(Environment* env, FSReqBase* req_wrap,
316
                         const v8::FunctionCallbackInfo<v8::Value>& args,
317
                         const char* syscall, const char* dest,
318
                         size_t len, enum encoding enc, uv_fs_cb after,
319
0
                         Func fn, Args... fn_args) {
320
0
  CHECK_NOT_NULL(req_wrap);
321
0
  req_wrap->Init(syscall, dest, len, enc);
322
0
  int err = req_wrap->Dispatch(fn, fn_args..., after);
323
0
  if (err < 0) {
324
0
    uv_fs_t* uv_req = req_wrap->req();
325
0
    uv_req->result = err;
326
0
    uv_req->path = nullptr;
327
0
    after(uv_req);  // after may delete req_wrap if there is an error
328
0
    req_wrap = nullptr;
329
0
  }
330
0
  return req_wrap;
331
0
}
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncDestCall<int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, char const*, unsigned long, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int)
332
333
// Returns nullptr if the operation fails from the start.
334
template <typename Func, typename... Args>
335
FSReqBase* AsyncCall(Environment* env,
336
                     FSReqBase* req_wrap,
337
                     const v8::FunctionCallbackInfo<v8::Value>& args,
338
                     const char* syscall, enum encoding enc,
339
0
                     uv_fs_cb after, Func fn, Args... fn_args) {
340
0
  return AsyncDestCall(env, req_wrap, args,
341
0
                       syscall, nullptr, 0, enc,
342
0
                       after, fn, fn_args...);
343
0
}
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int)
Unexecuted instantiation: node::fs::FSReqBase* node::fs::AsyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int>(node::Environment*, node::fs::FSReqBase*, v8::FunctionCallbackInfo<v8::Value> const&, char const*, node::encoding, void (*)(uv_fs_s*), int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int)
344
345
// Template counterpart of SYNC_CALL, except that it only puts
346
// the error number and the syscall in the context instead of
347
// creating an error in the C++ land.
348
// ctx must be checked using value->IsObject() before being passed.
349
template <typename Func, typename... Args>
350
v8::Maybe<int> SyncCall(Environment* env,
351
                        v8::Local<v8::Value> ctx,
352
                        FSReqWrapSync* req_wrap,
353
                        const char* syscall,
354
                        Func fn,
355
0
                        Args... args) {
356
0
  env->PrintSyncTrace();
357
0
  int err = fn(env->event_loop(), &(req_wrap->req), args..., nullptr);
358
0
  if (err < 0) {
359
0
    v8::Local<v8::Context> context = env->context();
360
0
    v8::Local<v8::Object> ctx_obj = ctx.As<v8::Object>();
361
0
    v8::Isolate* isolate = env->isolate();
362
0
    if (ctx_obj
363
0
            ->Set(context, env->errno_string(), v8::Integer::New(isolate, err))
364
0
            .IsNothing() ||
365
0
        ctx_obj
366
0
            ->Set(
367
0
                context, env->syscall_string(), OneByteString(isolate, syscall))
368
0
            .IsNothing()) {
369
0
      return v8::Nothing<int>();
370
0
    }
371
0
  }
372
0
  return v8::Just(err);
373
0
}
Unexecuted instantiation: v8::Maybe<int> node::fs::SyncCall<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int>(node::Environment*, v8::Local<v8::Value>, node::fs::FSReqWrapSync*, char const*, int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int)
Unexecuted instantiation: v8::Maybe<int> node::fs::SyncCall<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long>(node::Environment*, v8::Local<v8::Value>, node::fs::FSReqWrapSync*, char const*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long)
374
375
// Similar to SyncCall but throws immediately if there is an error.
376
template <typename Predicate, typename Func, typename... Args>
377
int SyncCallAndThrowIf(Predicate should_throw,
378
                       Environment* env,
379
                       FSReqWrapSync* req_wrap,
380
                       Func fn,
381
0
                       Args... args) {
382
0
  env->PrintSyncTrace();
383
0
  int result = fn(nullptr, &(req_wrap->req), args..., nullptr);
384
0
  if (should_throw(result)) {
385
0
    env->ThrowUVException(result,
386
0
                          req_wrap->syscall_p,
387
0
                          nullptr,
388
0
                          req_wrap->path_p,
389
0
                          req_wrap->dest_p);
390
0
  }
391
0
  return result;
392
0
}
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long)
Unexecuted instantiation: node_file.cc:int node::fs::SyncCallAndThrowIf<node::fs::FStat(v8::FunctionCallbackInfo<v8::Value> const&)::$_0, int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int>(node::fs::FStat(v8::FunctionCallbackInfo<v8::Value> const&)::$_0, node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowIf<bool (*)(int), int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int>(bool (*)(int), node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int)
393
394
0
constexpr bool is_uv_error(int result) {
395
0
  return result < 0;
396
0
}
397
398
// Similar to SyncCall but throws immediately if there is an error.
399
template <typename Func, typename... Args>
400
int SyncCallAndThrowOnError(Environment* env,
401
                            FSReqWrapSync* req_wrap,
402
                            Func fn,
403
0
                            Args... args) {
404
0
  return SyncCallAndThrowIf(is_uv_error, env, req_wrap, fn, args...);
405
0
}
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, void (*)(uv_fs_s*)), char*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, uv_dir_s*, void (*)(uv_fs_s*)), uv_dir_s*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, int, int, void (*)(uv_fs_s*)), char*, int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, long)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, unsigned long, long)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, void (*)(uv_fs_s*)), char*, char*)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, long, void (*)(uv_fs_s*)), int, long)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, char const*, int, void (*)(uv_fs_s*)), char*, char*, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, uv_buf_t const*, unsigned int, long, void (*)(uv_fs_s*)), int, uv_buf_t*, int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, int, void (*)(uv_fs_s*)), int, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, unsigned int, unsigned int, void (*)(uv_fs_s*)), char*, unsigned int, unsigned int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, unsigned int, unsigned int, void (*)(uv_fs_s*)), int, unsigned int, unsigned int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, double, double, void (*)(uv_fs_s*)), char*, double, double)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, double, double, void (*)(uv_fs_s*)), int, double, double)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, char const*, int, void (*)(uv_fs_s*)), char*, int)
Unexecuted instantiation: int node::fs::SyncCallAndThrowOnError<int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int>(node::Environment*, node::fs::FSReqWrapSync*, int (*)(uv_loop_s*, uv_fs_s*, int, void (*)(uv_fs_s*)), int)
406
407
}  // namespace fs
408
}  // namespace node
409
410
#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
411
412
#endif  // SRC_NODE_FILE_INL_H_