1 /*
2 * Copyright (c) 2020 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "nativeapi_fs.h"
17 #include <securec.h>
18 #include <new>
19 #include "ability_env.h"
20 #include "js_async_work.h"
21 #include "nativeapi_common.h"
22 #include "nativeapi_fs_impl.h"
23
24 namespace OHOS {
25 namespace ACELite {
26 namespace {
27 char g_uriFullPath[FILE_NAME_MAX_LEN + 1] = {0};
28 const unsigned int PREFIX_LEN = strlen(FILE_PREFIX);
29
IsValidPath(const char * path)30 bool IsValidPath(const char* path)
31 {
32 if (path == nullptr) {
33 return false;
34 }
35
36 size_t pathLen = strnlen(path, URI_NAME_MAX_LEN + 1);
37 if (pathLen > URI_NAME_MAX_LEN) {
38 return false;
39 }
40 if ((pathLen < PREFIX_LEN) || (strncmp(path, FILE_PREFIX, PREFIX_LEN) != 0)) {
41 return false;
42 }
43 if ((strstr(path, "/./") != nullptr) || (strstr(path, "/../") != nullptr)) {
44 return false;
45 }
46 if (strpbrk(path + PREFIX_LEN, "\"*+,:;<=>\?[]|\x7F")) {
47 return false;
48 }
49 return true;
50 }
51
GetFullPath(const char * uri,char * fullPath,int len)52 int GetFullPath(const char* uri, char* fullPath, int len)
53 {
54 if (!IsValidPath(uri) || (fullPath == nullptr)) {
55 return ERROR_CODE_PARAM;
56 }
57 const char* dataPath = GetDataPath();
58 if (dataPath == nullptr) {
59 return ERROR_CODE_PARAM;
60 }
61 if (memset_s(fullPath, len, 0x0, len) != EOK) {
62 return ERROR_CODE_GENERAL;
63 }
64 if (sprintf_s(fullPath, len, "%s%s", dataPath, uri + PREFIX_LEN) < 0) {
65 return ERROR_CODE_GENERAL;
66 }
67 return NATIVE_SUCCESS;
68 }
69
ExecuteAsyncWork(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum,AsyncWorkHandler ExecuteFunc,bool flag=false)70 JSIValue ExecuteAsyncWork(const JSIValue thisVal, const JSIValue* args,
71 uint8_t argsNum, AsyncWorkHandler ExecuteFunc, bool flag = false)
72 {
73 JSIValue undefValue = JSI::CreateUndefined();
74 if (!NativeapiCommon::IsValidJSIValue(args, argsNum)) {
75 return undefValue;
76 }
77 FuncParams* params = new(std::nothrow) FuncParams();
78 if (params == nullptr) {
79 return undefValue;
80 }
81 params->thisVal = JSI::AcquireValue(thisVal);
82 params->args = JSI::AcquireValue(args[0]);
83 params->flag = flag;
84 JsAsyncWork::DispatchAsyncWork(ExecuteFunc, reinterpret_cast<void *>(params));
85 return undefValue;
86 }
87
ExecuteCopyFile(void * data)88 void ExecuteCopyFile(void* data)
89 {
90 FuncParams* params = reinterpret_cast<FuncParams *>(data);
91 if (params == nullptr) {
92 return;
93 }
94 JSIValue args = params->args;
95 JSIValue thisVal = params->thisVal;
96 char* src = JSI::GetStringProperty(args, FILE_SOURCE_URI);
97 char* dest = JSI::GetStringProperty(args, FILE_DESTINATION_URI);
98 char* destFullPath = nullptr;
99 JSIValue result = JSI::CreateUndefined();
100 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
101 JSI::ReleaseString(src);
102 if (ret != NATIVE_SUCCESS) {
103 NativeapiCommon::FailCallBack(thisVal, args, ret);
104 goto EXIT;
105 }
106 destFullPath = reinterpret_cast<char *>(malloc(FILE_NAME_MAX_LEN + 1));
107 if (destFullPath == nullptr) {
108 NativeapiCommon::FailCallBack(thisVal, args, ERROR_CODE_GENERAL);
109 goto EXIT;
110 }
111 ret = GetFullPath(dest, destFullPath, FILE_NAME_MAX_LEN + 1);
112 if (ret != NATIVE_SUCCESS) {
113 NativeapiCommon::FailCallBack(thisVal, args, ret);
114 goto EXIT;
115 }
116 ret = CopyFileImpl(g_uriFullPath, destFullPath);
117 if (ret != NATIVE_SUCCESS) {
118 NativeapiCommon::FailCallBack(thisVal, args, ret);
119 goto EXIT;
120 }
121 if (params->flag) {
122 ret = DeleteFileImpl(g_uriFullPath);
123 }
124 if (ret != NATIVE_SUCCESS) {
125 NativeapiCommon::FailCallBack(thisVal, args, ret);
126 goto EXIT;
127 }
128 result = JSI::CreateString(dest);
129 NativeapiCommon::SuccessCallBack(thisVal, args, result);
130 EXIT:
131 JSI::ReleaseString(dest);
132 free(destFullPath);
133 JSI::ReleaseValueList(args, thisVal, result, ARGS_END);
134 delete params;
135 }
136
ExecuteDeleteAccess(void * data)137 void ExecuteDeleteAccess(void* data)
138 {
139 FuncParams* params = reinterpret_cast<FuncParams *>(data);
140 if (params == nullptr) {
141 return;
142 }
143 JSIValue args = params->args;
144 JSIValue thisVal = params->thisVal;
145 char* src = JSI::GetStringProperty(args, FILE_URI);
146 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
147 JSI::ReleaseString(src);
148 if (ret != NATIVE_SUCCESS) {
149 NativeapiCommon::FailCallBack(thisVal, args, ret);
150 goto EXIT;
151 }
152 if (params->flag) {
153 ret = DeleteFileImpl(g_uriFullPath);
154 } else {
155 ret = AccessImpl(g_uriFullPath);
156 }
157 if (ret != NATIVE_SUCCESS) {
158 NativeapiCommon::FailCallBack(thisVal, args, ret);
159 goto EXIT;
160 }
161 NativeapiCommon::SuccessCallBack(thisVal, args, JSI::CreateUndefined());
162 EXIT:
163 JSI::ReleaseValueList(args, thisVal, ARGS_END);
164 delete params;
165 }
166
GetFileListInner(const char * path,const char * key,JSIValue & result)167 int GetFileListInner(const char* path, const char* key, JSIValue& result)
168 {
169 int fileNum = GetFileNum(g_uriFullPath);
170 if (fileNum <= 0) {
171 return fileNum;
172 }
173 FileMetaInfo* fileList = reinterpret_cast<FileMetaInfo *>(malloc(fileNum * sizeof(FileMetaInfo)));
174 if (fileList == nullptr) {
175 return ERROR_CODE_GENERAL;
176 }
177 if (memset_s(fileList, fileNum * sizeof(FileMetaInfo), 0x0, fileNum * sizeof(FileMetaInfo)) != EOK) {
178 free(fileList);
179 return ERROR_CODE_GENERAL;
180 }
181 int ret = GetFileListImpl(g_uriFullPath, fileList, fileNum);
182 if (ret != NATIVE_SUCCESS) {
183 free(fileList);
184 return ret;
185 }
186 JSIValue arrayValue = JSI::CreateArray(fileNum);
187 for (int i = 0; i < fileNum; i++) {
188 JSIValue tmp = JSI::CreateObject();
189 JSI::SetStringProperty(tmp, FILE_URI, fileList[i].fileName);
190 JSI::SetNumberProperty(tmp, FILE_LENGTH, fileList[i].fileSize);
191 JSI::SetNumberProperty(tmp, FILE_LAST_MODIFIED_TIME, fileList[i].fileMtime);
192 JSI::SetStringProperty(tmp, FILE_TYPE, TYPE_FILE);
193 if (S_ISDIR(fileList[i].fileMode)) {
194 JSI::SetStringProperty(tmp, FILE_TYPE, TYPE_DIR);
195 }
196 JSI::SetPropertyByIndex(arrayValue, i, tmp);
197 JSI::ReleaseValue(tmp);
198 }
199 free(fileList);
200 JSI::SetNamedProperty(result, key, arrayValue);
201 JSI::ReleaseValue(arrayValue);
202 return NATIVE_SUCCESS;
203 }
204
ExecuteGetFileList(void * data)205 void ExecuteGetFileList(void* data)
206 {
207 FuncParams* params = reinterpret_cast<FuncParams *>(data);
208 if (params == nullptr) {
209 return;
210 }
211 JSIValue args = params->args;
212 JSIValue thisVal = params->thisVal;
213 char* uri = JSI::GetStringProperty(args, FILE_URI);
214 JSIValue result = JSI::CreateObject();
215 int ret = GetFullPath(uri, g_uriFullPath, sizeof(g_uriFullPath));
216 JSI::ReleaseString(uri);
217 if (ret != NATIVE_SUCCESS) {
218 NativeapiCommon::FailCallBack(thisVal, args, ret);
219 goto EXIT;
220 }
221 if (params->flag) {
222 ret = GetFileListInner(g_uriFullPath, FILE_LIST, result);
223 } else {
224 ret = GetFileListInner(g_uriFullPath, SUB_FILES, result);
225 }
226 if (ret != NATIVE_SUCCESS) {
227 NativeapiCommon::FailCallBack(thisVal, args, ret);
228 goto EXIT;
229 }
230 NativeapiCommon::SuccessCallBack(thisVal, args, result);
231 EXIT:
232 JSI::ReleaseValueList(args, thisVal, result, ARGS_END);
233 delete params;
234 }
235
ExecuteGetFileInfo(void * data)236 void ExecuteGetFileInfo(void* data)
237 {
238 FuncParams* params = reinterpret_cast<FuncParams *>(data);
239 if (params == nullptr) {
240 return;
241 }
242 JSIValue args = params->args;
243 JSIValue thisVal = params->thisVal;
244 char* src = JSI::GetStringProperty(args, FILE_URI);
245 bool recursive = JSI::GetBooleanProperty(args, RECURSIVE);
246 struct stat info = {0};
247 JSIValue result = JSI::CreateObject();
248 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
249 if (ret != NATIVE_SUCCESS) {
250 NativeapiCommon::FailCallBack(thisVal, args, ret);
251 goto EXIT;
252 }
253 ret = StatImpl(g_uriFullPath, &info);
254 if (ret != NATIVE_SUCCESS) {
255 NativeapiCommon::FailCallBack(thisVal, args, ret);
256 goto EXIT;
257 }
258 if (recursive && (S_ISDIR(info.st_mode))) {
259 JSI::ReleaseString(src);
260 ExecuteGetFileList(data);
261 return;
262 }
263 JSI::SetStringProperty(result, FILE_URI, src);
264 JSI::SetNumberProperty(result, FILE_LENGTH, info.st_size);
265 JSI::SetNumberProperty(result, FILE_LAST_MODIFIED_TIME, info.st_mtime);
266 JSI::SetStringProperty(result, FILE_TYPE, TYPE_FILE);
267 if (S_ISDIR(info.st_mode)) {
268 JSI::SetStringProperty(result, FILE_TYPE, TYPE_DIR);
269 }
270 NativeapiCommon::SuccessCallBack(thisVal, args, result);
271 EXIT:
272 JSI::ReleaseString(src);
273 JSI::ReleaseValueList(args, thisVal, result, ARGS_END);
274 delete params;
275 }
276
ExecuteWriteTextFile(void * data)277 void ExecuteWriteTextFile(void* data)
278 {
279 FuncParams* params = reinterpret_cast<FuncParams *>(data);
280 if (params == nullptr) {
281 return;
282 }
283 JSIValue args = params->args;
284 JSIValue thisVal = params->thisVal;
285 char* src = JSI::GetStringProperty(args, FILE_URI);
286 char* text = JSI::GetStringProperty(args, TEXT);
287 bool append = JSI::GetBooleanProperty(args, FILE_APPEND);
288 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
289 JSI::ReleaseString(src);
290 if ((text == nullptr) || (ret != NATIVE_SUCCESS)) {
291 NativeapiCommon::FailCallBack(thisVal, args, ERROR_CODE_PARAM);
292 goto EXIT;
293 }
294 ret = WriteTextFile(g_uriFullPath, text, strlen(text), append);
295 if (ret != NATIVE_SUCCESS) {
296 NativeapiCommon::FailCallBack(thisVal, args, ret);
297 goto EXIT;
298 }
299 NativeapiCommon::SuccessCallBack(thisVal, args, JSI::CreateUndefined());
300 EXIT:
301 JSI::ReleaseString(text);
302 JSI::ReleaseValueList(args, thisVal, ARGS_END);
303 delete params;
304 }
305
ReadTextInner(const char * src,int position,int length,JSIValue & result)306 int ReadTextInner(const char* src, int position, int length, JSIValue& result)
307 {
308 if ((position < 0) || (length < 0)) {
309 return ERROR_CODE_PARAM;
310 }
311 if (length == 0) {
312 length = TEXT_MAX_READ_LEN;
313 }
314 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
315 if (ret != NATIVE_SUCCESS) {
316 return ret;
317 }
318 struct stat info = {0};
319 ret = StatImpl(g_uriFullPath, &info);
320 if (ret != NATIVE_SUCCESS) {
321 return ret;
322 }
323 size_t readLen = (info.st_size > length) ? length : info.st_size;
324 if (readLen > TEXT_MAX_READ_LEN) {
325 return ERROR_CODE_READ_TOO_LONG;
326 }
327 char* text = reinterpret_cast<char *>(malloc(readLen + 1));
328 if (text == nullptr) {
329 return ERROR_CODE_GENERAL;
330 }
331 size_t actualLen = 0;
332 ret = ReadFileImpl(g_uriFullPath, text, readLen, position, &actualLen);
333 if (ret != NATIVE_SUCCESS) {
334 free(text);
335 return ret;
336 }
337 text[actualLen] = '\0';
338 JSI::SetStringProperty(result, TEXT, text);
339 free(text);
340 return NATIVE_SUCCESS;
341 }
342
ExecuteReadTextFile(void * data)343 void ExecuteReadTextFile(void* data)
344 {
345 FuncParams* params = reinterpret_cast<FuncParams *>(data);
346 if (params == nullptr) {
347 return;
348 }
349 JSIValue args = params->args;
350 JSIValue thisVal = params->thisVal;
351 char* src = JSI::GetStringProperty(args, FILE_URI);
352 double position = JSI::GetNumberProperty(args, FILE_POSITION);
353 double length = JSI::GetNumberProperty(args, FILE_LENGTH);
354 JSIValue result = JSI::CreateObject();
355 int ret = ReadTextInner(src, static_cast<int>(position), static_cast<int>(length), result);
356 JSI::ReleaseString(src);
357 if (ret == NATIVE_SUCCESS) {
358 NativeapiCommon::SuccessCallBack(thisVal, args, result);
359 } else {
360 NativeapiCommon::FailCallBack(thisVal, args, ret);
361 }
362 JSI::ReleaseValueList(args, thisVal, result, ARGS_END);
363 delete params;
364 }
365
ExecuteDirFunc(void * data)366 void ExecuteDirFunc(void* data)
367 {
368 FuncParams* params = reinterpret_cast<FuncParams *>(data);
369 if (params == nullptr) {
370 return;
371 }
372 JSIValue args = params->args;
373 JSIValue thisVal = params->thisVal;
374 char* src = JSI::GetStringProperty(args, FILE_URI);
375 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
376 JSI::ReleaseString(src);
377 bool recursive = JSI::GetBooleanProperty(args, RECURSIVE);
378 if (ret != NATIVE_SUCCESS) {
379 NativeapiCommon::FailCallBack(thisVal, args, ret);
380 goto EXIT;
381 }
382 if (params->flag) {
383 ret = CreateDirImpl(g_uriFullPath, recursive);
384 } else {
385 ret = RemoveDirImpl(g_uriFullPath, recursive);
386 }
387 if (ret != NATIVE_SUCCESS) {
388 NativeapiCommon::FailCallBack(thisVal, args, ret);
389 goto EXIT;
390 }
391 NativeapiCommon::SuccessCallBack(thisVal, args, JSI::CreateUndefined());
392 EXIT:
393 JSI::ReleaseValueList(args, thisVal, ARGS_END);
394 delete params;
395 }
396 #if (JS_FWK_TYPEDARRAY == NATIVE_FEATURE_ON)
ReadArrayFileInner(const char * path,size_t len,unsigned int position,JSIValue & result)397 int ReadArrayFileInner(const char* path, size_t len, unsigned int position, JSIValue& result)
398 {
399 struct stat info = {0};
400 int ret = StatImpl(path, &info);
401 if (ret != NATIVE_SUCCESS) {
402 return ret;
403 }
404 void* text = malloc(info.st_size + 1);
405 if (text == nullptr) {
406 return ERROR_CODE_GENERAL;
407 }
408 size_t actualLen = 0;
409 ret = ReadFileImpl(path, text, len, static_cast<int>(position), &actualLen);
410 if (ret != NATIVE_SUCCESS) {
411 free(text);
412 return ret;
413 }
414 uint8_t* ptr = nullptr;
415 JSIValue arrayBuffer = JSI::CreateArrayBuffer(actualLen, ptr);
416 if (ptr == nullptr) {
417 free(text);
418 JSI::ReleaseValue(arrayBuffer);
419 return ERROR_CODE_GENERAL;
420 }
421 ret = memcpy_s(ptr, actualLen, text, actualLen);
422 free(text);
423 if (ret != EOK) {
424 JSI::ReleaseValue(arrayBuffer);
425 return ERROR_CODE_GENERAL;
426 }
427 JSIValue typedArray = JSI::CreateTypedArray(TypedArrayType::JSI_UINT8_ARRAY, actualLen, arrayBuffer, 0);
428 JSI::SetNamedProperty(result, FILE_BUFFER, typedArray);
429 JSI::ReleaseValueList(typedArray, arrayBuffer, ARGS_END);
430 return NATIVE_SUCCESS;
431 }
432
ExecuteReadArrayFile(void * data)433 void ExecuteReadArrayFile(void* data)
434 {
435 FuncParams* params = reinterpret_cast<FuncParams *>(data);
436 if (params == nullptr) {
437 return;
438 }
439 JSIValue args = params->args;
440 JSIValue thisVal = params->thisVal;
441 char* src = JSI::GetStringProperty(args, FILE_URI);
442 double position = JSI::GetNumberProperty(args, FILE_POSITION);
443 double length = JSI::GetNumberProperty(args, FILE_LENGTH);
444 JSIValue result = JSI::CreateObject();
445 int ret = ERROR_CODE_PARAM;
446 if ((position < 0) || (length < 0)) {
447 JSI::ReleaseString(src);
448 NativeapiCommon::FailCallBack(thisVal, args, ret);
449 goto EXIT;
450 }
451 ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
452 JSI::ReleaseString(src);
453 if (ret != NATIVE_SUCCESS) {
454 NativeapiCommon::FailCallBack(thisVal, args, ret);
455 goto EXIT;
456 }
457 ret = ReadArrayFileInner(g_uriFullPath, static_cast<int>(length), static_cast<int>(position), result);
458 if (ret != NATIVE_SUCCESS) {
459 NativeapiCommon::FailCallBack(thisVal, args, ret);
460 goto EXIT;
461 }
462 NativeapiCommon::SuccessCallBack(thisVal, args, result);
463 EXIT:
464 JSI::ReleaseValueList(args, thisVal, result, ARGS_END);
465 delete params;
466 }
467
ExecuteWriteArrayFile(void * data)468 void ExecuteWriteArrayFile(void* data)
469 {
470 FuncParams* params = reinterpret_cast<FuncParams *>(data);
471 if (params == nullptr) {
472 return;
473 }
474 JSIValue args = params->args;
475 JSIValue thisVal = params->thisVal;
476 char* src = JSI::GetStringProperty(args, FILE_URI);
477 int ret = GetFullPath(src, g_uriFullPath, sizeof(g_uriFullPath));
478 JSI::ReleaseString(src);
479 if (ret != NATIVE_SUCCESS) {
480 NativeapiCommon::FailCallBack(thisVal, args, ret);
481 JSI::ReleaseValueList(args, thisVal, ARGS_END);
482 delete params;
483 return;
484 }
485 JSIValue buffer = JSI::GetNamedProperty(args, FILE_BUFFER);
486 double position = JSI::GetNumberProperty(args, FILE_POSITION);
487 bool append = JSI::GetBooleanProperty(args, FILE_APPEND);
488 TypedArrayType type = TypedArrayType::JSI_INVALID_ARRAY;
489 size_t length = 0;
490 JSIValue arrayBuffer = JSI::CreateUndefined();
491 size_t byteOffset = 0;
492 uint8_t* arrayPtr = JSI::GetTypedArrayInfo(buffer, type, length, arrayBuffer, byteOffset);
493 ret = ERROR_CODE_PARAM;
494 if ((position < 0) || (arrayPtr == nullptr) || (type != TypedArrayType::JSI_UINT8_ARRAY)) {
495 JSI::ReleaseValueList(buffer, arrayBuffer, ARGS_END);
496 NativeapiCommon::FailCallBack(thisVal, args, ERROR_CODE_PARAM);
497 goto EXIT;
498 }
499 ret = WriteArrayFile(g_uriFullPath, arrayPtr, length, static_cast<int>(position), append);
500 JSI::ReleaseValueList(buffer, arrayBuffer, ARGS_END);
501 if (ret != NATIVE_SUCCESS) {
502 NativeapiCommon::FailCallBack(thisVal, args, ret);
503 goto EXIT;
504 }
505 NativeapiCommon::SuccessCallBack(thisVal, args, JSI::CreateUndefined());
506 EXIT:
507 JSI::ReleaseValueList(args, thisVal, ARGS_END);
508 delete params;
509 }
510 #endif
511 }
512
InitNativeApiFs(JSIValue exports)513 void InitNativeApiFs(JSIValue exports)
514 {
515 JSI::SetModuleAPI(exports, "move", NativeapiFs::MoveFile);
516 JSI::SetModuleAPI(exports, "copy", NativeapiFs::CopyFile);
517 JSI::SetModuleAPI(exports, "delete", NativeapiFs::DeleteFile);
518 JSI::SetModuleAPI(exports, "list", NativeapiFs::GetFileList);
519 JSI::SetModuleAPI(exports, "get", NativeapiFs::GetFileInfo);
520 JSI::SetModuleAPI(exports, "readText", NativeapiFs::ReadTextFile);
521 JSI::SetModuleAPI(exports, "writeText", NativeapiFs::WriteTextFile);
522 JSI::SetModuleAPI(exports, "access", NativeapiFs::Access);
523 JSI::SetModuleAPI(exports, "mkdir", NativeapiFs::CreateDir);
524 JSI::SetModuleAPI(exports, "rmdir", NativeapiFs::RemoveDir);
525
526 #if (JS_FWK_TYPEDARRAY == NATIVE_FEATURE_ON)
527 JSI::SetModuleAPI(exports, "readArrayBuffer", NativeapiFs::ReadArrayFile);
528 JSI::SetModuleAPI(exports, "writeArrayBuffer", NativeapiFs::WriteArrayFile);
529 #endif
530 }
531
MoveFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)532 JSIValue NativeapiFs::MoveFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
533 {
534 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteCopyFile, true);
535 }
536
CopyFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)537 JSIValue NativeapiFs::CopyFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
538 {
539 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteCopyFile);
540 }
541
DeleteFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)542 JSIValue NativeapiFs::DeleteFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
543 {
544 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteDeleteAccess, true);
545 }
546
GetFileList(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)547 JSIValue NativeapiFs::GetFileList(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
548 {
549 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteGetFileList, true);
550 }
551
GetFileInfo(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)552 JSIValue NativeapiFs::GetFileInfo(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
553 {
554 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteGetFileInfo);
555 }
556
WriteTextFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)557 JSIValue NativeapiFs::WriteTextFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
558 {
559 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteWriteTextFile);
560 }
561
ReadTextFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)562 JSIValue NativeapiFs::ReadTextFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
563 {
564 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteReadTextFile);
565 }
566
Access(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)567 JSIValue NativeapiFs::Access(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
568 {
569 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteDeleteAccess);
570 }
571
CreateDir(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)572 JSIValue NativeapiFs::CreateDir(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
573 {
574 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteDirFunc, true);
575 }
576
RemoveDir(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)577 JSIValue NativeapiFs::RemoveDir(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
578 {
579 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteDirFunc);
580 }
581
582 #if (JS_FWK_TYPEDARRAY == NATIVE_FEATURE_ON)
ReadArrayFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)583 JSIValue NativeapiFs::ReadArrayFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
584 {
585 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteReadArrayFile);
586 }
587
WriteArrayFile(const JSIValue thisVal,const JSIValue * args,uint8_t argsNum)588 JSIValue NativeapiFs::WriteArrayFile(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum)
589 {
590 return ExecuteAsyncWork(thisVal, args, argsNum, ExecuteWriteArrayFile);
591 }
592 #endif
593 } // ACELite
594 } // OHOS
595