/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_ |