1 /*
2  * Copyright (c) 2023 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 "common/napi_helper.cpp"
17 #include "common/native_common.h"
18 #include "napi/native_api.h"
19 #include <cstdlib>
20 #include <cstring>
21 #include <err.h>
22 #include <fcntl.h>
23 #include <getopt.h>
24 #include <glob.h>
25 #include <ifaddrs.h>
26 #include <js_native_api.h>
27 #include <js_native_api_types.h>
28 #include <linux/quota.h>
29 #include <net/if.h>
30 #include <node_api.h>
31 #include <sys/inotify.h>
32 #include <sys/random.h>
33 #include <sys/syscall.h>
34 #include <sys/sysinfo.h>
35 #include <unistd.h>
36 #include <utmp.h>
37 #include <uv.h>
38 
39 #define BACKGROUND (0)
40 #define FOREGROUND (1)
41 #define TCGETPGRPERROR (-1)
42 #define ONEVAL 1
43 #define LASTONEVAL (-1)
44 #define THIRTEEN 13
45 
46 #define SUCCESS 1
47 #define FAIL (-1)
48 #define ONE 1
49 #define LENGTH 64
50 #define TWO 2
51 #define SIZE_64 64
52 #define DEF_VALUE (-2)
53 #define PATH2 "/data/storage/el2/base/files/text2.txt"
54 #define FILEPATH "/data/storage/el2/base/files"
55 #define PATH "/data/storage/el2/base/files/test.txt"
56 #define PATH_DIR "/data/storage/el2/base/files/"
57 
58 #define TEST_ALARM_TIME 2
59 #define NO_ERR 0
60 #define TEST_MODE 0666
61 #define TEST_0777 0777
62 #define TEST_ID_VALUE 100
63 
64 #define PARAM_0 0
65 #define PARAM_1 1
66 #define MPARAM_1 (-1)
67 #define PARAM_2 2
68 #define PARAM_3 3
69 #define PARAM_10 10
70 #define PARAM_64 64
71 #define PARAM_32 32
72 #define PARAM_128 128
73 #define PARAM_256 256
74 #define PARAM_666 666
75 #define PARAM_127 127
76 #define PARAM_0x0 0x0
77 #define PARAM_5 5
78 #define PARAM_6 6
79 #define PARAM_0444 0444
80 #define PARAM_0777 0777
81 #define PARAM_UNNORMAL (-1)
82 #define RETURN_0 0
83 #define FAILD (-1)
84 #define ERRON_0 0
85 #define SIZE_10 10
86 #define SIZE_100 100
87 #define SIZE_50 50
88 #define SIZE_200 200
89 #define SIZE_4096 4096
90 #define SIZE_8192 8192
91 #define TIMEDIFF 2000
92 #define TEST_BUFFER_SIZE 64
93 #define TEST_DUP 35
94 #define MINUSONE (-1)
95 #define GROUPS_MAX 2
96 #define PARAM_20 20
97 extern "C" ssize_t __readlink_chk(const char *, char *, size_t, size_t);
98 
Setpgid(napi_env env, napi_callback_info info)99 static napi_value Setpgid(napi_env env, napi_callback_info info)
100 {
101     size_t argc = PARAM_2;
102     napi_value args[PARAM_2] = {nullptr};
103     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
104     int first;
105     napi_get_value_int32(env, args[PARAM_0], &first);
106     int second;
107     napi_get_value_int32(env, args[PARAM_1], &second);
108     pid_t pid = first;
109     pid_t pgid = second;
110     int setpgidd = setpgid(pid, pgid);
111     napi_value result;
112     napi_create_int32(env, setpgidd, &result);
113     return result;
114 }
115 
Setpgrp(napi_env env, napi_callback_info info)116 static napi_value Setpgrp(napi_env env, napi_callback_info info)
117 {
118     size_t argc = PARAM_1;
119     napi_value args[PARAM_1] = {nullptr};
120     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
121     int first;
122     napi_get_value_int32(env, args[PARAM_0], &first);
123     napi_value result;
124     pid_t pt = setpgrp();
125     if (first == LASTONEVAL) {
126         if (pt == LASTONEVAL && getpgrp() != getpid()) {
127             napi_create_double(env, pt, &result);
128         } else {
129             napi_create_double(env, ONEVAL, &result);
130         }
131     } else {
132         napi_create_double(env, pt, &result);
133     }
134     return result;
135 }
136 
Setresuid(napi_env env, napi_callback_info info)137 static napi_value Setresuid(napi_env env, napi_callback_info info)
138 {
139     uid_t uid = LASTONEVAL;
140     int setval = setresuid(uid, uid, uid);
141     napi_value result;
142     napi_create_int32(env, setval, &result);
143     return result;
144 }
145 
GetGroups(napi_env env, napi_callback_info info)146 static napi_value GetGroups(napi_env env, napi_callback_info info)
147 {
148     size_t argc = 1;
149     napi_value args[1] = {nullptr};
150     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
151 
152     int valueZero;
153     napi_get_value_int32(env, args[0], &valueZero);
154 
155     int getInfo = FAIL;
156     int size = valueZero;
157     gid_t list[PARAM_32];
158     getInfo = getgroups(sizeof(size), list);
159     if (getInfo != FAIL) {
160         getInfo = NO_ERR;
161     }
162     napi_value result = nullptr;
163     napi_create_int32(env, getInfo, &result);
164     return result;
165 }
166 
GetPid(napi_env env, napi_callback_info info)167 static napi_value GetPid(napi_env env, napi_callback_info info)
168 {
169     pid_t getInfo = FAIL;
170     getInfo = getpid();
171     napi_value result = nullptr;
172     napi_create_int32(env, getInfo, &result);
173     return result;
174 }
GetPPid(napi_env env, napi_callback_info info)175 static napi_value GetPPid(napi_env env, napi_callback_info info)
176 {
177     pid_t getInfo = FAIL;
178     getInfo = getppid();
179     napi_value result = nullptr;
180     napi_create_int32(env, getInfo, &result);
181     return result;
182 }
GetPGrp(napi_env env, napi_callback_info info)183 static napi_value GetPGrp(napi_env env, napi_callback_info info)
184 {
185     int setResult = setpgrp();
186     pid_t getInfo = FAIL;
187     if (setResult == PARAM_0) {
188         getInfo = getpgrp();
189     }
190     if (getInfo != FAIL) {
191         getInfo = SUCCESS;
192     }
193     napi_value result = nullptr;
194     napi_create_int32(env, getInfo, &result);
195     return result;
196 }
Crypt(napi_env env, napi_callback_info info)197 static napi_value Crypt(napi_env env, napi_callback_info info)
198 {
199     size_t argc = PARAM_1;
200     napi_value args[PARAM_1] = {nullptr};
201     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
202     const char *key = "password";
203     size_t lenA;
204     size_t lenV = PARAM_32;
205     char *salt = static_cast<char *>(malloc(sizeof(char) * lenV));
206     napi_get_value_string_utf8(env, args[PARAM_0], salt, lenV, &lenA);
207     char *cryptResult = crypt(key, salt);
208     napi_value result = nullptr;
209     napi_create_string_utf8(env, cryptResult, NAPI_AUTO_LENGTH, &result);
210     return result;
211 }
GetPGid(napi_env env, napi_callback_info info)212 static napi_value GetPGid(napi_env env, napi_callback_info info)
213 {
214     int ret = FAIL;
215     pid_t getInfo = getpgid(getpid());
216     if (getInfo != FAIL) {
217         ret = SUCCESS;
218     }
219     napi_value result = nullptr;
220     napi_create_int32(env, ret, &result);
221     return result;
222 }
223 
GetSid(napi_env env, napi_callback_info info)224 static napi_value GetSid(napi_env env, napi_callback_info info)
225 {
226     size_t argc = PARAM_1;
227     napi_value args[PARAM_1] = {nullptr};
228     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
229 
230     double valueZero;
231     napi_get_value_double(env, args[PARAM_0], &valueZero);
232 
233     pid_t getInfo = FAIL;
234     getInfo = getsid(valueZero);
235     if (FAIL != getInfo) {
236         getInfo = SUCCESS;
237     }
238 
239     napi_value result = nullptr;
240     napi_create_int32(env, getInfo, &result);
241     return result;
242 }
243 
GetUid(napi_env env, napi_callback_info info)244 static napi_value GetUid(napi_env env, napi_callback_info info)
245 {
246     uid_t uid = getuid();
247     int ret = FAIL;
248     if (uid != FAIL) {
249         ret = SUCCESS;
250     }
251     napi_value result = nullptr;
252     napi_create_int32(env, ret, &result);
253     return result;
254 }
255 
GetLogin(napi_env env, napi_callback_info info)256 static napi_value GetLogin(napi_env env, napi_callback_info info)
257 {
258     char *getInfo = nullptr;
259     getInfo = getlogin();
260     int ret = FAIL;
261     if (getInfo == nullptr) {
262         setenv("LOGNAME", "newlogname", PARAM_1);
263         getInfo = getlogin();
264         unsetenv("LOGNAME");
265     }
266     if (getInfo != nullptr) {
267         ret = SUCCESS;
268     }
269     napi_value result = nullptr;
270     napi_create_int32(env, ret, &result);
271     return result;
272 }
273 
GetLoginR(napi_env env, napi_callback_info info)274 static napi_value GetLoginR(napi_env env, napi_callback_info info)
275 {
276     char szUserName[256] = {0};
277     int ret = getlogin_r(szUserName, PARAM_256);
278     if (ret == PARAM_6) {
279         int senv = setenv("LOGNAME", "newlogname", SIZE_10);
280         if (senv == PARAM_0) {
281             ret = getlogin_r(szUserName, PARAM_256);
282             if (ret == PARAM_0) {
283                 ret = PARAM_1;
284             }
285         }
286         unsetenv("LOGNAME");
287     }
288     napi_value result = nullptr;
289     napi_create_int32(env, ret, &result);
290     return result;
291 }
292 
GetOpt(napi_env env, napi_callback_info info)293 static napi_value GetOpt(napi_env env, napi_callback_info info)
294 {
295     size_t argc = PARAM_1;
296     napi_value args[PARAM_1] = {nullptr};
297     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
298 
299     size_t length = LENGTH;
300     size_t strResult = PARAM_0;
301     char *strTemp = static_cast<char *>(malloc(sizeof(char) * length));
302 
303     napi_get_value_string_utf8(env, args[PARAM_0], strTemp, length, &strResult);
304     optind = PARAM_0;
305     int optArgc = PARAM_3;
306     char cmdline[SIZE_50] = "./parse_cmdline";
307     char para[SIZE_100] = "100";
308     char *optArgv[] = {cmdline, strTemp, para};
309     char optString[SIZE_50] = "a:b:c:d";
310     int getInfo = getopt(optArgc, optArgv, optString);
311 
312     napi_value result = nullptr;
313     napi_create_int32(env, getInfo, &result);
314     return result;
315 }
316 
GetTid(napi_env env, napi_callback_info info)317 static napi_value GetTid(napi_env env, napi_callback_info info)
318 {
319     pid_t getInfo = FAIL;
320     getInfo = gettid();
321     napi_value result = nullptr;
322     napi_create_int32(env, getInfo, &result);
323     return result;
324 }
325 
GetEUid(napi_env env, napi_callback_info info)326 static napi_value GetEUid(napi_env env, napi_callback_info info)
327 {
328     uid_t getInfo = PARAM_0;
329     getInfo = geteuid();
330     napi_value result = nullptr;
331     napi_create_int32(env, getInfo, &result);
332     return result;
333 }
334 
GetGid(napi_env env, napi_callback_info info)335 static napi_value GetGid(napi_env env, napi_callback_info info)
336 {
337     uid_t getInfo = PARAM_0;
338     getInfo = getgid();
339     napi_value result = nullptr;
340     napi_create_int32(env, getInfo, &result);
341     return result;
342 }
343 
GetEGid(napi_env env, napi_callback_info info)344 static napi_value GetEGid(napi_env env, napi_callback_info info)
345 {
346     uid_t getInfo = PARAM_0;
347     getInfo = getegid();
348     napi_value result = nullptr;
349     napi_create_int32(env, getInfo, &result);
350     return result;
351 }
352 
GetHostName(napi_env env, napi_callback_info info)353 static napi_value GetHostName(napi_env env, napi_callback_info info)
354 {
355     char name[65];
356     int getInfo = gethostname(name, sizeof(name));
357     napi_value result = nullptr;
358     napi_create_int32(env, getInfo, &result);
359     return result;
360 }
GetPageSize(napi_env env, napi_callback_info info)361 static napi_value GetPageSize(napi_env env, napi_callback_info info)
362 {
363     int getInfo = getpagesize();
364     napi_value result = nullptr;
365     napi_create_int32(env, getInfo, &result);
366     return result;
367 }
368 
GetDTableSize(napi_env env, napi_callback_info info)369 static napi_value GetDTableSize(napi_env env, napi_callback_info info)
370 {
371     int getInfo = getdtablesize();
372     napi_value result = nullptr;
373     napi_create_int32(env, getInfo, &result);
374     return result;
375 }
GetReSuid(napi_env env, napi_callback_info info)376 static napi_value GetReSuid(napi_env env, napi_callback_info info)
377 {
378     uid_t ruid = THIRTEEN;
379     uid_t euid = THIRTEEN;
380     uid_t suid = THIRTEEN;
381 
382     int getInfo = getresuid(&ruid, &euid, &suid);
383 
384     napi_value result = nullptr;
385     napi_create_int32(env, getInfo, &result);
386     return result;
387 }
388 
GetResGid(napi_env env, napi_callback_info info)389 static napi_value GetResGid(napi_env env, napi_callback_info info)
390 {
391     gid_t rgid = THIRTEEN;
392     gid_t egid = THIRTEEN;
393     gid_t sgid = THIRTEEN;
394     int getInfo = getresgid(&rgid, &egid, &sgid);
395     napi_value result = nullptr;
396     napi_create_int32(env, getInfo, &result);
397     return result;
398 }
399 
Sleep(napi_env env, napi_callback_info info)400 static napi_value Sleep(napi_env env, napi_callback_info info)
401 {
402     size_t argc = PARAM_1;
403     napi_value args[PARAM_1] = {nullptr};
404     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
405     int valueZero;
406     napi_get_value_int32(env, args[PARAM_0], &valueZero);
407     int sin_value = sleep(valueZero);
408     napi_value result = nullptr;
409     napi_create_int32(env, sin_value, &result);
410     return result;
411 }
412 
Isatty(napi_env env, napi_callback_info info)413 static napi_value Isatty(napi_env env, napi_callback_info info)
414 {
415     int fd = open("/data/storage/el2/base/files/test.txt", O_CREAT, PARAM_0777);
416     int sin_value = isatty(fd);
417     close(fd);
418     napi_value result = nullptr;
419     napi_create_int32(env, sin_value, &result);
420     return result;
421 }
422 
Swab(napi_env env, napi_callback_info info)423 static napi_value Swab(napi_env env, napi_callback_info info)
424 {
425     size_t argc = PARAM_1;
426     napi_value args[PARAM_1] = {nullptr};
427     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
428     int valueFirst;
429     napi_get_value_int32(env, args[PARAM_0], &valueFirst);
430     char *sigValue;
431     char src[PARAM_20] = "ABCD";
432     char dest[PARAM_20] = "abcd";
433     if (valueFirst == PARAM_0) {
434         swab(src, dest, TWO);
435         sigValue = dest;
436     } else {
437         swab(src, dest, FAIL);
438         sigValue = dest;
439     }
440     napi_value result;
441     napi_create_string_utf8(env, sigValue, NAPI_AUTO_LENGTH, &result);
442     return result;
443 }
Sync(napi_env env, napi_callback_info info)444 static napi_value Sync(napi_env env, napi_callback_info info)
445 {
446     errno = ERRON_0;
447     sync();
448     napi_value result = nullptr;
449     napi_create_int32(env, errno, &result);
450     return result;
451 }
452 
Syncfs(napi_env env, napi_callback_info info)453 static napi_value Syncfs(napi_env env, napi_callback_info info)
454 {
455     int syncfs_value = syncfs(FAIL);
456     napi_value result = nullptr;
457     napi_create_int32(env, syncfs_value, &result);
458     return result;
459 }
460 
Syscall(napi_env env, napi_callback_info info)461 static napi_value Syscall(napi_env env, napi_callback_info info)
462 {
463     pid_t tid;
464     tid = syscall(SYS_gettid);
465     napi_value result = nullptr;
466 
467     if (tid > PARAM_0) {
468         napi_create_int32(env, PARAM_0, &result);
469         return result;
470     } else {
471         napi_create_int32(env, FAIL, &result);
472         return result;
473     }
474 }
475 
Sysinfo(napi_env env, napi_callback_info info)476 static napi_value Sysinfo(napi_env env, napi_callback_info info)
477 {
478     size_t argc = PARAM_1;
479     napi_value args[PARAM_1] = {nullptr};
480     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
481     int valueFirst;
482     napi_get_value_int32(env, args[PARAM_0], &valueFirst);
483     int sys_value;
484     if (valueFirst == PARAM_0) {
485         struct sysinfo infos;
486         sys_value = sysinfo(&infos);
487     } else {
488         sys_value = sysinfo(nullptr);
489     }
490     napi_value result = nullptr;
491     napi_create_int32(env, sys_value, &result);
492     return result;
493 }
494 
Sync_file_range(napi_env env, napi_callback_info info)495 static napi_value Sync_file_range(napi_env env, napi_callback_info info)
496 {
497     int sync_value = sync_file_range(FAIL, PARAM_0, PARAM_0, PARAM_0);
498     napi_value result = nullptr;
499     napi_create_int32(env, sync_value, &result);
500     return result;
501 }
502 
Symlink(napi_env env, napi_callback_info info)503 static napi_value Symlink(napi_env env, napi_callback_info info)
504 {
505     char file_name[] = PATH;
506     char linkName[] = PATH2;
507     int syslink_result = symlink(file_name, linkName);
508     unlink(linkName);
509     napi_value result = nullptr;
510     napi_create_int32(env, syslink_result, &result);
511     return result;
512 }
513 
Symlinkat(napi_env env, napi_callback_info info)514 static napi_value Symlinkat(napi_env env, napi_callback_info info)
515 {
516     char symlinkName[] = "teat";
517     creat(PATH, O_RDWR | O_CREAT);
518     DIR *dp = opendir(PATH_DIR);
519     int fdd = dirfd(dp);
520     int syslinkat_result = symlinkat(PATH, fdd, symlinkName);
521     unlinkat(fdd, symlinkName, PARAM_0);
522     unlink(PATH);
523     napi_value result = nullptr;
524     napi_create_int32(env, syslinkat_result, &result);
525     return result;
526 }
527 
tcgetpgrp_handler(void)528 int tcgetpgrp_handler(void)
529 {
530     pid_t pid;
531     errno = ERRON_0;
532     pid = tcgetpgrp(STDIN_FILENO);
533     if (pid == MPARAM_1) {
534         return TCGETPGRPERROR;
535     } else if (pid == getpgrp()) {
536         return FOREGROUND;
537     } else {
538         return BACKGROUND;
539     }
540 }
Tcsetpgrp(napi_env env, napi_callback_info info)541 static napi_value Tcsetpgrp(napi_env env, napi_callback_info info)
542 {
543     size_t argc = PARAM_1;
544     napi_value args[PARAM_1] = {nullptr};
545     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
546     int valueFirst;
547     napi_get_value_int32(env, args[PARAM_0], &valueFirst);
548     int result = PARAM_0;
549     if (valueFirst == PARAM_0) {
550         result = tcsetpgrp(FAIL, FAIL);
551     } else {
552         tcgetsid(STDIN_FILENO);
553         tcgetpgrp_handler();
554         result = tcsetpgrp(STDIN_FILENO, getpgrp());
555         tcgetpgrp_handler();
556         result = tcsetpgrp(STDIN_FILENO, getpgrp());
557     }
558     napi_value results = nullptr;
559     napi_create_int32(env, result, &results);
560     return results;
561 }
562 
Tcgetpgrp(napi_env env, napi_callback_info info)563 static napi_value Tcgetpgrp(napi_env env, napi_callback_info info)
564 {
565     size_t argc = PARAM_1;
566     napi_value args[PARAM_1] = {nullptr};
567     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
568     int valueFirst;
569     napi_get_value_int32(env, args[PARAM_0], &valueFirst);
570     int result = PARAM_0;
571     if (valueFirst == PARAM_0) {
572         result = tcgetpgrp(FAIL);
573     } else {
574         tcgetsid(STDIN_FILENO);
575         result = tcgetpgrp_handler();
576     }
577     napi_value results = nullptr;
578     napi_create_int32(env, result, &results);
579     return results;
580 }
581 
Read(napi_env env, napi_callback_info info)582 static napi_value Read(napi_env env, napi_callback_info info)
583 {
584     size_t argc = 1;
585     napi_value args[1] = {nullptr};
586     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
587     size_t length = SIZE_64, stresult = SIZE_64;
588     char path[length];
589     napi_get_value_string_utf8(env, args[0], path, length, &stresult);
590     int fd = open(path, O_CREAT, TEST_MODE);
591     char buf[SIZE_100];
592     int len = PARAM_2;
593     int bytes = read(fd, buf, len);
594     napi_value result = nullptr;
595     if (bytes < PARAM_0) {
596         napi_create_int32(env, PARAM_UNNORMAL, &result);
597     } else {
598         napi_create_int32(env, PARAM_0, &result);
599     }
600     return result;
601 }
602 
Readlink(napi_env env, napi_callback_info info)603 static napi_value Readlink(napi_env env, napi_callback_info info)
604 {
605     size_t argc = PARAM_1;
606     napi_value args[PARAM_1] = {nullptr};
607     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
608 
609     int param = FAIL;
610     napi_get_value_int32(env, args[PARAM_0], &param);
611 
612     int resultValue = FAILD;
613     if (param == PARAM_UNNORMAL) {
614         char *buf = nullptr;
615         int ret = FAIL;
616         const char *softptr = "./noreadlink.txt.soft";
617         ret = readlink(softptr, buf, sizeof(buf));
618         if (ret < PARAM_0) {
619             resultValue = RETURN_0;
620         }
621     } else {
622         struct stat sb;
623         char *buf;
624         int ret;
625         buf = static_cast<char *>(malloc(sb.st_size + PARAM_1));
626         errno = ERRON_0;
627         ret = readlink("/data/storage/el2/base/files/testReadlink.txt", buf, sizeof(buf));
628         if (errno != ERRON_0) {
629             resultValue = errno;
630         }
631         if (ret > PARAM_0) {
632             resultValue = RETURN_0;
633         }
634     }
635 
636     napi_value result = nullptr;
637     napi_create_int32(env, resultValue, &result);
638     return result;
639 }
640 
Readlinkat(napi_env env, napi_callback_info info)641 static napi_value Readlinkat(napi_env env, napi_callback_info info)
642 {
643     ssize_t bytes = readlinkat(PARAM_UNNORMAL, nullptr, nullptr, PARAM_0);
644 
645     napi_value result = nullptr;
646     int resultValue = FAILD;
647     if (bytes < PARAM_0) {
648         resultValue = RETURN_0;
649     }
650 
651     napi_create_int32(env, resultValue, &result);
652     return result;
653 }
654 
Rmdir(napi_env env, napi_callback_info info)655 static napi_value Rmdir(napi_env env, napi_callback_info info)
656 {
657     size_t argc = PARAM_1;
658     napi_value args[PARAM_1] = {nullptr};
659     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
660     int param;
661     napi_get_value_int32(env, args[PARAM_0], &param);
662 
663     int ret;
664     if (param == PARAM_UNNORMAL) {
665         char path[] = "errorPath";
666         ret = access(path, F_OK);
667         if (ret == PARAM_0) {
668             rmdir(path);
669         }
670         ret = rmdir(path);
671     } else {
672         char path[] = "/data/storage/el2/base/files/rmdirPath";
673         ret = access(path, F_OK);
674         if (ret == PARAM_0) {
675             remove(path);
676         }
677         mkdir(path, TEST_0777);
678         ret = rmdir(path);
679     }
680 
681     napi_value result = nullptr;
682     napi_create_int32(env, ret, &result);
683     return result;
684 }
685 
Ttyname(napi_env env, napi_callback_info info)686 static napi_value Ttyname(napi_env env, napi_callback_info info)
687 {
688     size_t argc = PARAM_1;
689     napi_value args[PARAM_1] = {nullptr};
690     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
691 
692     int isOpenFile = FAIL;
693 
694     napi_get_value_int32(env, args[PARAM_0], &isOpenFile);
695     int value0 = FAIL;
696 
697     if (isOpenFile == PARAM_1) {
698         char file[SIZE_100] = "/dev/tty";
699         value0 = open(file, O_RDONLY);
700     } else {
701         char file[SIZE_100] = "/unexit";
702         value0 = open(file, O_RDONLY);
703     }
704 
705     int tojsResult = FAIL;
706 
707     if (value0 == FAIL) {
708         char *ttyname_value = ttyname(value0);
709         if (ttyname_value == nullptr) {
710             tojsResult = PARAM_0;
711         }
712     } else {
713         char *ttyname_value = ttyname(value0);
714         if (ttyname_value != nullptr) {
715             tojsResult = PARAM_0;
716         }
717     }
718     close(value0);
719     napi_value result = nullptr;
720     napi_create_int32(env, tojsResult, &result);
721 
722     return result;
723 }
724 
Ttyname_r(napi_env env, napi_callback_info info)725 static napi_value Ttyname_r(napi_env env, napi_callback_info info)
726 {
727     size_t argc = 3;
728     napi_value args[3] = {nullptr};
729     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
730 
731     int isOpenFile = FAIL;
732     int tojsResult = FAIL;
733     napi_get_value_int32(env, args[PARAM_0], &isOpenFile);
734 
735     if (isOpenFile != PARAM_1) {
736         int fd = open("/dev/null", O_WRONLY);
737         char buf[PARAM_1];
738         tojsResult = ttyname_r(fd, buf, sizeof(buf));
739         if (tojsResult == ENOTTY) {
740             tojsResult = PARAM_0;
741         }
742         close(fd);
743     }
744     napi_value result = nullptr;
745     napi_create_int32(env, tojsResult, &result);
746 
747     return result;
748 }
749 
Truncate(napi_env env, napi_callback_info info)750 static napi_value Truncate(napi_env env, napi_callback_info info)
751 {
752     char path[] = "/data/storage/el2/base/files/testTruncated.txt";
753     int df = open(path, O_CREAT, TEST_MODE);
754     int truncate_value = FAIL;
755     if (df != MPARAM_1) {
756         close(df);
757         truncate_value = truncate(path, PARAM_0);
758     }
759     napi_value result = nullptr;
760     remove(path);
761     napi_create_int32(env, truncate_value, &result);
762     return result;
763 }
764 
Truncate64(napi_env env, napi_callback_info info)765 static napi_value Truncate64(napi_env env, napi_callback_info info)
766 {
767     char path[] = "/data/storage/el2/base/files/moTruncated.txt";
768     int df = open(path, O_CREAT, TEST_MODE);
769     int truncate_value = FAIL;
770     if (df != MPARAM_1) {
771         close(df);
772         truncate_value = truncate64(path, PARAM_0);
773     }
774     napi_value result = nullptr;
775     remove(path);
776     napi_create_int32(env, truncate_value, &result);
777     return result;
778 }
779 
Unlink(napi_env env, napi_callback_info info)780 static napi_value Unlink(napi_env env, napi_callback_info info)
781 {
782     size_t argc = PARAM_1;
783     napi_value args[PARAM_1] = {nullptr};
784     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
785     int param;
786     napi_get_value_int32(env, args[PARAM_0], &param);
787 
788     int ret;
789     if (param == PARAM_UNNORMAL) {
790         char path[] = "unexist_test_unlink.txt";
791         ret = unlink(path);
792     } else {
793         char path[] = "/data/storage/el2/base/files/test_unlink.txt";
794         int fd = open(path, O_CREAT, TEST_MODE);
795         close(fd);
796         ret = unlink(path);
797     }
798 
799     napi_value result = nullptr;
800     napi_create_int32(env, ret, &result);
801     return result;
802 }
803 
Unlinkat(napi_env env, napi_callback_info info)804 static napi_value Unlinkat(napi_env env, napi_callback_info info)
805 {
806     size_t argc = PARAM_1;
807     napi_value args[PARAM_1] = {nullptr};
808     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
809     int param;
810     napi_get_value_int32(env, args[PARAM_0], &param);
811 
812     int ret;
813     if (param == PARAM_UNNORMAL) {
814         char path[] = "unexist_test_unlinkat.txt";
815         ret = unlinkat(PARAM_UNNORMAL, path, AT_REMOVEDIR);
816     } else {
817         char path[] = "/data/storage/el2/base/files/test_unlinkat.txt";
818         int fd = open(path, O_CREAT, TEST_MODE);
819         ret = unlinkat(fd, path, PARAM_0);
820         close(fd);
821     }
822 
823     napi_value result = nullptr;
824     napi_create_int32(env, ret, &result);
825     return result;
826 }
827 
Usleep(napi_env env, napi_callback_info info)828 static napi_value Usleep(napi_env env, napi_callback_info info)
829 {
830     size_t argc = PARAM_1;
831     napi_value args[PARAM_1] = {nullptr};
832     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
833 
834     int valueFirst;
835     napi_get_value_int32(env, args[PARAM_0], &valueFirst);
836 
837     struct timespec old_time;
838     clock_gettime(CLOCK_MONOTONIC, &old_time);
839 
840     int usleepResult = usleep(valueFirst);
841     struct timespec new_time;
842     clock_gettime(CLOCK_MONOTONIC, &new_time);
843 
844     long int difference = new_time.tv_sec - old_time.tv_sec - TIMEDIFF;
845 
846     int toJs = FAIL;
847     if (usleepResult == PARAM_0 && difference <= TWO) {
848         toJs = SUCCESS;
849     }
850 
851     napi_value result = nullptr;
852     napi_create_int32(env, toJs, &result);
853     return result;
854 }
855 
Access(napi_env env, napi_callback_info info)856 static napi_value Access(napi_env env, napi_callback_info info)
857 {
858     errno = ERRON_0;
859     int fd = open("/data/storage/el2/base/files/fzl.txt", O_CREAT, PARAM_0777);
860     int returnValue = access("/data/storage/el2/base/files/fzl.txt", F_OK);
861     close(fd);
862     napi_value result = nullptr;
863     napi_create_int32(env, returnValue, &result);
864     return result;
865 }
866 
Eaccess(napi_env env, napi_callback_info info)867 static napi_value Eaccess(napi_env env, napi_callback_info info)
868 {
869     errno = ERRON_0;
870     int fd = open("/data/storage/el2/base/files/fzl.txt", O_CREAT, PARAM_0777);
871     int returnValue = eaccess("/data/storage/el2/base/files/fzl.txt", F_OK);
872     close(fd);
873     napi_value result = nullptr;
874     napi_create_int32(env, returnValue, &result);
875     return result;
876 }
877 
Fexecve(napi_env env, napi_callback_info info)878 static napi_value Fexecve(napi_env env, napi_callback_info info)
879 {
880     int fileDescribe;
881     int backParam = ERRON_0;
882     pid_t fpid = fork();
883     if (fpid == ERRON_0) {
884         const char *pathname = "/data/storage/el2/base/files/Fzl.txt";
885         int flags = O_CREAT;
886         mode_t mode = S_IRWXU;
887         fileDescribe = open(pathname, flags, mode);
888         char strTemp[] = "/data/storage/el2/base/files/Fzl.txt";
889         char *const argv[] = {strTemp, nullptr};
890         char *const envp[] = {nullptr};
891         backParam = fexecve(fileDescribe, argv, envp);
892         close(fileDescribe);
893         _exit(PARAM_0);
894     }
895     napi_value result = nullptr;
896     napi_create_int32(env, backParam, &result);
897     return result;
898 }
899 
Execvpe(napi_env env, napi_callback_info info)900 static napi_value Execvpe(napi_env env, napi_callback_info info)
901 {
902     int backParam = ERRON_0;
903     pid_t fpid = fork();
904     if (fpid == ERRON_0) {
905         const char *pathname = "/data/storage/el2/base/files/LXL.txt";
906         int flags = O_CREAT;
907         mode_t mode = S_IRWXU;
908         int fd = open(pathname, flags, mode);
909         char *const firstParam[] = {nullptr};
910         char *const secondParam[] = {nullptr};
911         backParam = execvpe(pathname, firstParam, secondParam);
912         close(fd);
913         _exit(PARAM_0);
914     }
915     napi_value result = nullptr;
916     napi_create_int32(env, backParam, &result);
917     return result;
918 }
919 
Execvp(napi_env env, napi_callback_info info)920 static napi_value Execvp(napi_env env, napi_callback_info info)
921 {
922     int backParam = ERRON_0;
923     pid_t fpid = fork();
924     if (fpid == ERRON_0) {
925         const char *pathname = "/data/storage/el2/base/files/LXL.txt";
926         int flags = O_CREAT;
927         mode_t mode = S_IRWXU;
928         int fd = open(pathname, flags, mode);
929         char *const firstParam[PARAM_1] = {nullptr};
930         backParam = execvp(pathname, firstParam);
931         close(fd);
932         _exit(PARAM_0);
933     }
934     napi_value result = nullptr;
935     napi_create_int32(env, backParam, &result);
936     return result;
937 }
938 
Execve(napi_env env, napi_callback_info info)939 static napi_value Execve(napi_env env, napi_callback_info info)
940 {
941     int backParam = ERRON_0;
942     pid_t fpid = fork();
943     if (fpid == ERRON_0) {
944         const char *pathname = "/data/storage/el2/base/files/LXL.txt";
945         int flags = O_CREAT;
946         mode_t mode = S_IRWXU;
947         int fd = open(pathname, flags, mode);
948         char *const firstParam[] = {nullptr};
949         char *const secondParam[] = {nullptr};
950         backParam = execve(pathname, firstParam, secondParam);
951         close(fd);
952         _exit(PARAM_0);
953     }
954     napi_value result = nullptr;
955     napi_create_int32(env, backParam, &result);
956     return result;
957 }
958 
Execlp(napi_env env, napi_callback_info info)959 static napi_value Execlp(napi_env env, napi_callback_info info)
960 {
961     int backParam = ERRON_0;
962     pid_t fpid = fork();
963     if (fpid == ERRON_0) {
964         const char *pathname = "/data/storage/el2/base/files/LXL.txt";
965         int flags = O_CREAT;
966         mode_t mode = S_IRWXU;
967         int fd = open(pathname, flags, mode);
968         const char *firstParam = nullptr;
969         backParam = execlp(pathname, firstParam);
970         close(fd);
971         _exit(PARAM_0);
972     }
973     napi_value result = nullptr;
974     napi_create_int32(env, backParam, &result);
975     return result;
976 }
Execl(napi_env env, napi_callback_info info)977 static napi_value Execl(napi_env env, napi_callback_info info)
978 {
979     int backParam = ERRON_0;
980     pid_t fpid = fork();
981     if (fpid == ERRON_0) {
982         backParam = execl("/bin/ls", "ls", "-al", "/etc/passwd", static_cast<char *>(ERRON_0));
983         _exit(PARAM_0);
984     }
985     napi_value result = nullptr;
986     napi_create_int32(env, backParam, &result);
987     return result;
988 }
989 
Execv(napi_env env, napi_callback_info info)990 static napi_value Execv(napi_env env, napi_callback_info info)
991 {
992     int backParam = ERRON_0;
993     pid_t fpid = fork();
994     if (fpid == ERRON_0) {
995         char s1[] = "/data/storage/el2/base/files";
996         char s2[] = "/Fzl.txt";
997         char *args[3];
998         args[PARAM_0] = s1;
999         args[PARAM_1] = s2;
1000         args[PARAM_2] = nullptr;
1001         backParam = execv(args[PARAM_0], args);
1002         _exit(PARAM_0);
1003     }
1004     napi_value result = nullptr;
1005     napi_create_int32(env, backParam, &result);
1006     return result;
1007 }
1008 
Execle(napi_env env, napi_callback_info info)1009 static napi_value Execle(napi_env env, napi_callback_info info)
1010 {
1011     int backParam = ERRON_0;
1012     pid_t fpid = fork();
1013     if (fpid == ERRON_0) {
1014         const char *pathname = "/data/storage/el2/base/files/LXL.txt";
1015         int flags = O_CREAT;
1016         mode_t mode = S_IRWXU;
1017         int fd = open(pathname, flags, mode);
1018         const char *firstParam = nullptr;
1019         backParam = execle(pathname, firstParam);
1020         close(fd);
1021         _exit(PARAM_0);
1022     }
1023     napi_value result = nullptr;
1024     napi_create_int32(env, backParam, &result);
1025     return result;
1026 }
1027 
Alarm(napi_env env, napi_callback_info info)1028 static napi_value Alarm(napi_env env, napi_callback_info info)
1029 {
1030     size_t argc = PARAM_1;
1031     napi_value args[PARAM_1] = {nullptr};
1032     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1033     int param;
1034     napi_get_value_int32(env, args[PARAM_0], &param);
1035     napi_value result = nullptr;
1036 
1037     int resultValue = alarm(param);
1038     if (resultValue >= PARAM_0) {
1039         resultValue = PARAM_0;
1040     }
1041     napi_create_int32(env, resultValue, &result);
1042 
1043     return result;
1044 }
1045 
get_brk()1046 void *get_brk() { return sbrk(PARAM_0); }
Brk(napi_env env, napi_callback_info info)1047 static napi_value Brk(napi_env env, napi_callback_info info)
1048 {
1049     void *initial_break = get_brk();
1050     void *newBreak = (void *)((uintptr_t)(initial_break) + PARAM_1);
1051     int resultValue = brk(newBreak);
1052 
1053     napi_value result = nullptr;
1054     napi_create_int32(env, resultValue, &result);
1055 
1056     return result;
1057 }
1058 
Acct(napi_env env, napi_callback_info info)1059 static napi_value Acct(napi_env env, napi_callback_info info)
1060 {
1061     napi_value result = nullptr;
1062     napi_create_int32(env, FAIL, &result);
1063     return result;
1064 }
1065 
Getentropy(napi_env env, napi_callback_info info)1066 static napi_value Getentropy(napi_env env, napi_callback_info info)
1067 {
1068     void *buffer[256];
1069     int resultValue = getentropy(buffer, PARAM_256);
1070     napi_value result = nullptr;
1071     napi_create_int32(env, resultValue, &result);
1072 
1073     return result;
1074 }
1075 
Getdomainname(napi_env env, napi_callback_info info)1076 static napi_value Getdomainname(napi_env env, napi_callback_info info)
1077 {
1078     char cbuf[BUFSIZ] = {PARAM_0};
1079     int resultValue = getdomainname(cbuf, sizeof(cbuf));
1080     napi_value result = nullptr;
1081     napi_create_int32(env, resultValue, &result);
1082 
1083     return result;
1084 }
1085 
Getcwd(napi_env env, napi_callback_info info)1086 static napi_value Getcwd(napi_env env, napi_callback_info info)
1087 {
1088     char *value;
1089     char buf[200] = {PARAM_0};
1090     value = getcwd(buf, sizeof(buf));
1091     int resultValue = FAIL;
1092     if (value != nullptr) {
1093         resultValue = SUCCESS;
1094     }
1095     napi_value result = nullptr;
1096     napi_create_int32(env, resultValue, &result);
1097 
1098     return result;
1099 }
1100 
Fork(napi_env env, napi_callback_info info)1101 static napi_value Fork(napi_env env, napi_callback_info info)
1102 {
1103     pid_t fpid;
1104 
1105     fpid = fork();
1106     int ret = FAIL;
1107     if (fpid != FAIL) {
1108         ret = SUCCESS;
1109     }
1110     if (fpid == PARAM_0) {
1111         _exit(PARAM_0);
1112     }
1113 
1114     napi_value result = nullptr;
1115     napi_create_int32(env, ret, &result);
1116 
1117     return result;
1118 }
1119 
Fpathconf(napi_env env, napi_callback_info info)1120 static napi_value Fpathconf(napi_env env, napi_callback_info info)
1121 {
1122     long value = fpathconf(PARAM_0, _PC_LINK_MAX);
1123     int ret = FAIL;
1124     if (value != FAIL) {
1125         ret = SUCCESS;
1126     }
1127     napi_value result = nullptr;
1128     napi_create_int32(env, ret, &result);
1129 
1130     return result;
1131 }
1132 
Chdir(napi_env env, napi_callback_info info)1133 static napi_value Chdir(napi_env env, napi_callback_info info)
1134 {
1135     int returnValue = chdir("/data/storage/el2/base/files");
1136     napi_value result;
1137     napi_create_int32(env, returnValue, &result);
1138     return result;
1139 }
1140 
Chown(napi_env env, napi_callback_info info)1141 static napi_value Chown(napi_env env, napi_callback_info info)
1142 {
1143     int getUId = getuid();
1144     int getGId = getgid();
1145     int returnValue = chown("/data/storage/el2/base/files", getUId, getGId);
1146     napi_value result;
1147     napi_create_int32(env, returnValue, &result);
1148     return result;
1149 }
1150 
Chroot(napi_env env, napi_callback_info info)1151 static napi_value Chroot(napi_env env, napi_callback_info info)
1152 {
1153     napi_value result;
1154     napi_create_int32(env, NO_ERR, &result);
1155     return result;
1156 }
1157 
Fsync(napi_env env, napi_callback_info info)1158 static napi_value Fsync(napi_env env, napi_callback_info info)
1159 {
1160     int fd = open("/data/storage/el2/base/files/Fzl.txt", O_CREAT, PARAM_0777);
1161     int ret = fsync(fd);
1162     close(fd);
1163     napi_value result;
1164     napi_create_int32(env, ret, &result);
1165     return result;
1166 }
1167 
Ftruncate(napi_env env, napi_callback_info info)1168 static napi_value Ftruncate(napi_env env, napi_callback_info info)
1169 {
1170     FILE *fptr = fopen("/data/storage/el2/base/files/Fzl.txt", "w");
1171     NAPI_ASSERT(env, fptr != nullptr, "Ftruncate fopen Error");
1172     fprintf(fptr, "%s", "this is a sample!");
1173     int freturn = ftruncate(fileno(fptr), SIZE_100);
1174     fclose(fptr);
1175     napi_value result;
1176     napi_create_int32(env, freturn, &result);
1177     return result;
1178 }
1179 
Ftruncate64(napi_env env, napi_callback_info info)1180 static napi_value Ftruncate64(napi_env env, napi_callback_info info)
1181 {
1182     FILE *fptr = fopen("/data/storage/el2/base/files/Fzl.txt", "w");
1183     NAPI_ASSERT(env, fptr != nullptr, "Ftruncate64 fopen Error");
1184     fprintf(fptr, "%s", "this is a sample!");
1185     int freturn = ftruncate64(fileno(fptr), SIZE_100);
1186     fclose(fptr);
1187     napi_value result;
1188     napi_create_int32(env, freturn, &result);
1189     return result;
1190 }
1191 
LChOwn(napi_env env, napi_callback_info info)1192 static napi_value LChOwn(napi_env env, napi_callback_info info)
1193 {
1194     size_t argc = PARAM_1;
1195     napi_value args[PARAM_1] = {nullptr};
1196     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1197     size_t length = PARAM_64, stresult = PARAM_64;
1198     char *strTemp = static_cast<char *>(malloc(sizeof(char) * length));
1199 
1200     napi_get_value_string_utf8(env, args[PARAM_0], strTemp, length, &stresult);
1201     int value = lchown(strTemp, TEST_ID_VALUE, TEST_ID_VALUE);
1202     napi_value result = nullptr;
1203     napi_create_int32(env, value, &result);
1204     return result;
1205 }
1206 
Link(napi_env env, napi_callback_info info)1207 static napi_value Link(napi_env env, napi_callback_info info)
1208 {
1209     size_t argc = PARAM_2;
1210     napi_value args[PARAM_2] = {nullptr};
1211     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1212     size_t lenA;
1213     size_t lenV = PARAM_32;
1214     char *oldPath = static_cast<char *>(malloc(sizeof(char) * lenV));
1215     char *newPath = static_cast<char *>(malloc(sizeof(char) * lenV));
1216     napi_get_value_string_utf8(env, args[PARAM_0], oldPath, lenV, &lenA);
1217     napi_get_value_string_utf8(env, args[PARAM_1], newPath, lenV, &lenA);
1218 
1219     int value = link(oldPath, newPath);
1220 
1221     errno = ERRON_0;
1222 
1223     napi_value result = nullptr;
1224     napi_create_int32(env, value, &result);
1225     return result;
1226 }
1227 
LinkAt(napi_env env, napi_callback_info info)1228 static napi_value LinkAt(napi_env env, napi_callback_info info)
1229 {
1230     size_t argc = PARAM_2;
1231     napi_value args[PARAM_2] = {nullptr};
1232     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1233     size_t lenA;
1234     size_t lenV = PARAM_32;
1235     char *oldPath = static_cast<char *>(malloc(sizeof(char) * lenV));
1236     char *newPath = static_cast<char *>(malloc(sizeof(char) * lenV));
1237 
1238     napi_get_value_string_utf8(env, args[PARAM_0], oldPath, lenV, &lenA);
1239     napi_get_value_string_utf8(env, args[PARAM_1], newPath, lenV, &lenA);
1240 
1241     int newFd = creat(newPath, PARAM_666);
1242     int value = linkat(AT_FDCWD, oldPath, newFd, newPath, AT_SYMLINK_FOLLOW);
1243     napi_value result = nullptr;
1244     napi_create_int32(env, value, &result);
1245     return result;
1246 }
1247 
LockF(napi_env env, napi_callback_info info)1248 static napi_value LockF(napi_env env, napi_callback_info info)
1249 {
1250     size_t argc = PARAM_1;
1251     napi_value args[PARAM_1] = {nullptr};
1252     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1253     size_t lenA;
1254     size_t lenV = PARAM_32;
1255     char *path = static_cast<char *>(malloc(sizeof(char) * lenV));
1256     int ret;
1257     napi_get_value_string_utf8(env, args[PARAM_0], path, lenV, &lenA);
1258     int fd = open(path, O_RDWR | O_CREAT, TEST_MODE);
1259     ret = lockf(fd, F_LOCK, PARAM_0);
1260     lockf(fd, F_ULOCK, PARAM_0);
1261     close(fd);
1262     remove(path);
1263     napi_value result = nullptr;
1264     napi_create_int32(env, ret, &result);
1265     return result;
1266 }
1267 
LockF64(napi_env env, napi_callback_info info)1268 static napi_value LockF64(napi_env env, napi_callback_info info)
1269 {
1270     errno = ERRON_0;
1271     size_t argc = PARAM_1;
1272     napi_value args[PARAM_1] = {nullptr};
1273     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1274     size_t lenA;
1275     size_t lenV = PARAM_32;
1276     char *path = static_cast<char *>(malloc(sizeof(char) * lenV));
1277     int ret;
1278     napi_get_value_string_utf8(env, args[PARAM_0], path, lenV, &lenA);
1279     int fd = open(path, O_RDWR | O_CREAT, TEST_MODE);
1280     ret = lockf64(fd, F_LOCK, PARAM_0);
1281     lockf64(fd, F_ULOCK, PARAM_0);
1282     close(fd);
1283     remove(path);
1284     napi_value result = nullptr;
1285     napi_create_int32(env, ret, &result);
1286     return result;
1287 }
1288 
Getrandom(napi_env env, napi_callback_info info)1289 static napi_value Getrandom(napi_env env, napi_callback_info info)
1290 {
1291     void *buf = malloc(PARAM_32);
1292     ssize_t ret = getrandom(buf, PARAM_32, PARAM_0);
1293     napi_value result = nullptr;
1294     if (ret != PARAM_UNNORMAL) {
1295         napi_create_int32(env, PARAM_0, &result);
1296     } else {
1297         napi_create_int32(env, PARAM_UNNORMAL, &result);
1298     }
1299     return result;
1300 }
Glob(napi_env env, napi_callback_info info)1301 static napi_value Glob(napi_env env, napi_callback_info info)
1302 {
1303     glob_t buf;
1304     int ret = glob("/data/storage/el2/base/files/*", GLOB_NOSORT, nullptr, &buf);
1305     napi_value result = nullptr;
1306     if (ret == PARAM_0) {
1307         napi_create_int32(env, PARAM_0, &result);
1308     } else {
1309         napi_create_int32(env, PARAM_UNNORMAL, &result);
1310     }
1311     globfree(&buf);
1312     return result;
1313 }
1314 
Globfree(napi_env env, napi_callback_info info)1315 static napi_value Globfree(napi_env env, napi_callback_info info)
1316 {
1317     glob_t buf;
1318     int ret = glob("/data/storage/el2/base/files/*", GLOB_NOSORT, nullptr, &buf);
1319     napi_value result = nullptr;
1320     if (ret == PARAM_0) {
1321         napi_create_int32(env, PARAM_0, &result);
1322     } else {
1323         napi_create_int32(env, PARAM_UNNORMAL, &result);
1324     }
1325     globfree(&buf);
1326     return result;
1327 }
1328 
ReadLink(napi_env env, napi_callback_info info)1329 static napi_value ReadLink(napi_env env, napi_callback_info info)
1330 {
1331     struct stat sb;
1332     int exp = FAIL;
1333     const char wstr[] = "this is a test\n";
1334     const char softptr[] = "/data/storage/el2/base/files/readlink.txt.soft";
1335     char *buf = static_cast<char *>(malloc(sizeof(char) * (sb.st_size + 1)));
1336     const char ptr[] = "/data/storage/el2/base/files/readlink.txt";
1337     FILE *fptr = fopen(ptr, "w");
1338     if (fptr != nullptr) {
1339         fwrite(wstr, sizeof(char), strlen(wstr), fptr);
1340     }
1341     fclose(fptr);
1342     int link = symlink("/data/storage/el2/base/files/symlink.txt", softptr);
1343     if (link == PARAM_0) {
1344         ssize_t ret = readlink(softptr, buf, sizeof(buf));
1345         if (ret != static_cast<ssize_t>(FAIL)) {
1346             exp = PARAM_0;
1347         }
1348     }
1349     remove(ptr);
1350     remove(softptr);
1351     napi_value result = nullptr;
1352     napi_create_int32(env, exp, &result);
1353     return result;
1354 }
1355 
ReadLinkAt(napi_env env, napi_callback_info info)1356 static napi_value ReadLinkAt(napi_env env, napi_callback_info info)
1357 {
1358     struct stat sb;
1359     int exp = FAIL;
1360     const char wstr[] = "this is a test\n";
1361     const char softptr[] = "/data/storage/el2/base/files/readlink.txt.soft";
1362     char *buf = static_cast<char *>(malloc(sizeof(char) * (sb.st_size + 1)));
1363     const char ptr[] = "/data/storage/el2/base/files/readlink.txt";
1364     FILE *fptr = fopen(ptr, "w");
1365     if (fptr != nullptr) {
1366         fwrite(wstr, sizeof(char), strlen(wstr), fptr);
1367     }
1368     fclose(fptr);
1369     int link = symlink("/data/storage/el2/base/files/symlink.txt", softptr);
1370     if (link == PARAM_0) {
1371         ssize_t ret = readlinkat(PARAM_0, softptr, buf, sizeof(buf));
1372         if (ret != static_cast<ssize_t>(FAIL)) {
1373             exp = PARAM_0;
1374         }
1375     }
1376     remove(ptr);
1377     remove(softptr);
1378     napi_value result = nullptr;
1379     napi_create_int32(env, exp, &result);
1380     return result;
1381 }
1382 
Optarg(napi_env env, napi_callback_info info)1383 static napi_value Optarg(napi_env env, napi_callback_info info)
1384 {
1385     optind = PARAM_0;
1386     int optArgc = PARAM_3;
1387     char cmdline[50] = "./parse_cmdline";
1388     char para[100] = "100";
1389     char par[3] = "-a";
1390     char *optArgv[] = {cmdline, par, para};
1391     char optString[50] = "a:b:c:d";
1392     int ch = getopt(optArgc, optArgv, optString);
1393     int res = PARAM_0;
1394     if (ch == 'a') {
1395         if (optarg == para) {
1396             res = SUCCESS;
1397         } else {
1398             res = FAIL;
1399         }
1400     } else {
1401         res = FAIL;
1402     }
1403     napi_value result = nullptr;
1404     napi_create_int32(env, res, &result);
1405     return result;
1406 }
Optind(napi_env env, napi_callback_info info)1407 static napi_value Optind(napi_env env, napi_callback_info info)
1408 {
1409     optind = PARAM_0;
1410     int optArgc = PARAM_3;
1411     char cmdline[50] = "./parse_cmdline";
1412     char para[100] = "100";
1413     char par[3] = "-a";
1414     char *optArgv[] = {cmdline, par, para};
1415     char optString[50] = "a:b:c:d";
1416     int ch = getopt(optArgc, optArgv, optString);
1417     int res = PARAM_0;
1418     if (ch == 'a') {
1419         if (optind == PARAM_3) {
1420             res = SUCCESS;
1421         } else {
1422             res = FAIL;
1423         }
1424     } else {
1425         res = FAIL;
1426     }
1427     napi_value result = nullptr;
1428     napi_create_int32(env, res, &result);
1429     return result;
1430 }
Optopt(napi_env env, napi_callback_info info)1431 static napi_value Optopt(napi_env env, napi_callback_info info)
1432 {
1433     optind = PARAM_0;
1434     int optArgc = PARAM_3;
1435     char cmdline[50] = "./parse_cmdline";
1436     char para[100] = "100";
1437     char par[3] = "-f";
1438     char *optArgv[] = {cmdline, par, para};
1439     char optString[50] = "a:b:c:d";
1440     int ch = getopt(optArgc, optArgv, optString);
1441 
1442     int res = PARAM_0;
1443     if (ch == '?') {
1444         if (optopt == 'f') {
1445             res = SUCCESS;
1446         } else {
1447             res = FAIL;
1448         }
1449     } else {
1450         res = FAIL;
1451     }
1452     napi_value result = nullptr;
1453     napi_create_int32(env, res, &result);
1454     return result;
1455 }
Opterr(napi_env env, napi_callback_info info)1456 static napi_value Opterr(napi_env env, napi_callback_info info)
1457 {
1458     optind = PARAM_0;
1459     opterr = PARAM_0;
1460     int optArgc = PARAM_3;
1461     char cmdline[50] = "./parse_cmdline";
1462     char para[100] = "100";
1463     char par[3] = "-a";
1464     char *optArgv[] = {cmdline, par, para};
1465     char optString[50] = "a:b:c:d";
1466     int ch = getopt(optArgc, optArgv, optString);
1467     int res = PARAM_0;
1468     if (ch == 'a') {
1469         if (opterr == PARAM_0) {
1470             res = SUCCESS;
1471         } else {
1472             res = FAIL;
1473         }
1474     } else {
1475         res = FAIL;
1476     }
1477     napi_value result = nullptr;
1478     napi_create_int32(env, res, &result);
1479     return result;
1480 }
1481 
PRead(napi_env env, napi_callback_info info)1482 static napi_value PRead(napi_env env, napi_callback_info info)
1483 {
1484     const char *txt = "This is pread_0100 test.";
1485     int ret = PARAM_UNNORMAL;
1486     char buffer[64];
1487     int bufferSize = PARAM_64;
1488     memset(buffer, PARAM_0x0, sizeof(buffer));
1489     int fd = open("/data/storage/el2/base/files/test.txt", O_CREAT | O_RDWR, PARAM_0777);
1490     pwrite(fd, txt, strlen(txt), PARAM_0);
1491     lseek(fd, PARAM_0, SEEK_SET);
1492     size_t cnt = pread(fd, buffer, bufferSize, PARAM_0);
1493     if (cnt == strlen(txt)) {
1494         ret = SUCCESS;
1495     } else {
1496         ret = FAIL;
1497     }
1498     close(fd);
1499     napi_value result = nullptr;
1500     napi_create_int32(env, ret, &result);
1501     return result;
1502 }
1503 
Nice(napi_env env, napi_callback_info info)1504 static napi_value Nice(napi_env env, napi_callback_info info)
1505 {
1506     size_t argc = PARAM_1;
1507     napi_value args[PARAM_1] = {nullptr};
1508     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1509 
1510     int value;
1511     napi_get_value_int32(env, args[PARAM_0], &value);
1512     int ret = nice(value);
1513     if (ret != MPARAM_1) {
1514         ret = PARAM_0;
1515     }
1516     napi_value result = nullptr;
1517     napi_create_int32(env, ret, &result);
1518     return result;
1519 }
1520 
Pipe(napi_env env, napi_callback_info info)1521 static napi_value Pipe(napi_env env, napi_callback_info info)
1522 {
1523     int fd[PARAM_2];
1524     int ret = pipe(fd);
1525     napi_value result = nullptr;
1526     napi_create_int32(env, ret, &result);
1527     return result;
1528 }
1529 
Pipe2(napi_env env, napi_callback_info info)1530 static napi_value Pipe2(napi_env env, napi_callback_info info)
1531 {
1532     int fd[PARAM_2];
1533     int ret = pipe2(fd, O_CLOEXEC);
1534     napi_value result = nullptr;
1535     napi_create_int32(env, ret, &result);
1536     return result;
1537 }
1538 
Pathconf(napi_env env, napi_callback_info info)1539 static napi_value Pathconf(napi_env env, napi_callback_info info)
1540 {
1541     errno = ERRON_0;
1542     napi_value result = nullptr;
1543     int status = PARAM_0;
1544     psignal(WTERMSIG(status), "signal");
1545     napi_create_int32(env, errno, &result);
1546     return result;
1547 }
1548 
do_plain_test(int (*fn1)(void *arg), void *arg1, int (*fn2)(void *arg), void *arg2)1549 int do_plain_test(int (*fn1)(void *arg), void *arg1, int (*fn2)(void *arg), void *arg2)
1550 {
1551     int ret = PARAM_0;
1552     int pid = PARAM_0;
1553     pid = fork();
1554     if (pid == FAIL) {
1555         return FAIL;
1556     }
1557     if (pid == PARAM_0)
1558         _exit(PARAM_0);
1559     if (fn2)
1560         ret = fn2(arg2);
1561     return ret;
1562 }
1563 
pausetest(void *testarg)1564 int pausetest(void *testarg)
1565 {
1566     int flag = pause();
1567     return flag;
1568 }
1569 
Pause(napi_env env, napi_callback_info info)1570 static napi_value Pause(napi_env env, napi_callback_info info)
1571 {
1572     void *test = nullptr;
1573     do_plain_test(pausetest, test, nullptr, nullptr);
1574     napi_value result = nullptr;
1575     napi_create_int32(env, SUCCESS, &result);
1576     return result;
1577 }
1578 
Pread(napi_env env, napi_callback_info info)1579 static napi_value Pread(napi_env env, napi_callback_info info)
1580 {
1581     size_t argc = PARAM_1;
1582     napi_value args[PARAM_1] = {nullptr};
1583     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1584 
1585     size_t size = PARAM_64;
1586     char buffer[100];
1587     off_t offset = PARAM_10;
1588     char *value = static_cast<char *>(malloc(sizeof(char) * size));
1589     size_t actualVal;
1590     napi_get_value_string_utf8(env, args[PARAM_0], value, size, &actualVal);
1591 
1592     napi_value result = nullptr;
1593     int fd = open(value, O_RDWR);
1594     ssize_t ret = pread(fd, buffer, sizeof(buffer), offset);
1595     close(fd);
1596     napi_create_int32(env, ret, &result);
1597     return result;
1598 }
1599 
Setsid(napi_env env, napi_callback_info info)1600 static napi_value Setsid(napi_env env, napi_callback_info info)
1601 {
1602     int ret = FAIL;
1603     pid_t fk = fork();
1604     if (fk == PARAM_0) {
1605         setsid();
1606         _exit(PARAM_0);
1607     } else {
1608         ret = NO_ERR;
1609     }
1610 
1611     napi_value result;
1612     napi_create_int32(env, ret, &result);
1613     return result;
1614 }
1615 
Setdomainname(napi_env env, napi_callback_info info)1616 static napi_value Setdomainname(napi_env env, napi_callback_info info)
1617 {
1618     napi_value result;
1619     napi_create_int32(env, PARAM_0, &result);
1620     return result;
1621 }
1622 
Setgroups(napi_env env, napi_callback_info info)1623 static napi_value Setgroups(napi_env env, napi_callback_info info)
1624 {
1625     napi_value result;
1626     napi_create_int32(env, PARAM_0, &result);
1627     return result;
1628 }
1629 
Setgid(napi_env env, napi_callback_info info)1630 static napi_value Setgid(napi_env env, napi_callback_info info)
1631 {
1632     napi_value result;
1633     napi_create_int32(env, PARAM_UNNORMAL, &result);
1634     return result;
1635 }
1636 
Seteuid(napi_env env, napi_callback_info info)1637 static napi_value Seteuid(napi_env env, napi_callback_info info)
1638 {
1639     napi_value result;
1640     napi_create_int32(env, PARAM_0, &result);
1641     return result;
1642 }
1643 
Setegid(napi_env env, napi_callback_info info)1644 static napi_value Setegid(napi_env env, napi_callback_info info)
1645 {
1646     napi_value result;
1647     napi_create_int32(env, PARAM_0, &result);
1648     return result;
1649 }
1650 
Setreuid(napi_env env, napi_callback_info info)1651 static napi_value Setreuid(napi_env env, napi_callback_info info)
1652 {
1653     napi_value result;
1654     napi_create_int32(env, PARAM_0, &result);
1655     return result;
1656 }
1657 
Setregid(napi_env env, napi_callback_info info)1658 static napi_value Setregid(napi_env env, napi_callback_info info)
1659 {
1660     napi_value result;
1661     napi_create_int32(env, PARAM_0, &result);
1662     return result;
1663 }
1664 
Setresgid(napi_env env, napi_callback_info info)1665 static napi_value Setresgid(napi_env env, napi_callback_info info)
1666 {
1667     napi_value result;
1668     napi_create_int32(env, PARAM_0, &result);
1669     return result;
1670 }
1671 
Issetugid(napi_env env, napi_callback_info info)1672 static napi_value Issetugid(napi_env env, napi_callback_info info)
1673 {
1674     int ret = issetugid();
1675     napi_value result = nullptr;
1676     if (ret == PARAM_0) {
1677         napi_create_int32(env, RETURN_0, &result);
1678     } else {
1679         napi_create_int32(env, FAILD, &result);
1680     }
1681 
1682     return result;
1683 }
ReadlinkChk(napi_env env, napi_callback_info info)1684 static napi_value ReadlinkChk(napi_env env, napi_callback_info info)
1685 {
1686     struct stat sb;
1687     int exp = FAIL;
1688     const char wstr[] = "this is a test\n";
1689     const char softptr[] = "/data/storage/el2/base/files/readlink.txt.soft";
1690     char *buf = static_cast<char *>(malloc(sizeof(char) * (sb.st_size + 1)));
1691     const char ptr[] = "/data/storage/el2/base/files/readlink.txt";
1692     FILE *fptr = fopen(ptr, "w");
1693     if (fptr != nullptr) {
1694         fwrite(wstr, sizeof(char), strlen(wstr), fptr);
1695     }
1696     fclose(fptr);
1697     int link = symlink("/data/storage/el2/base/files/symlink.txt", softptr);
1698     if (link == PARAM_0) {
1699         ssize_t ret = __readlink_chk(softptr, buf, sizeof(buf), sizeof(buf));
1700         if (ret != static_cast<ssize_t>(FAIL)) {
1701             exp = PARAM_0;
1702         }
1703     }
1704     remove(ptr);
1705     remove(softptr);
1706     napi_value result = nullptr;
1707     napi_create_int32(env, exp, &result);
1708     return result;
1709 }
1710 
Vfork(napi_env env, napi_callback_info info)1711 static napi_value Vfork(napi_env env, napi_callback_info info)
1712 {
1713     int adj = PARAM_0;
1714     pid_t pid;
1715     pid = vfork();
1716 
1717     if (pid < PARAM_0) {
1718         adj = FAIL;
1719     }
1720     if (pid == PARAM_0) {
1721         sleep(PARAM_1);
1722         _exit(PARAM_0);
1723     }
1724     napi_value result;
1725     napi_create_int32(env, adj, &result);
1726     return result;
1727 }
Sethostname(napi_env env, napi_callback_info info)1728 static napi_value Sethostname(napi_env env, napi_callback_info info)
1729 {
1730     napi_value resval;
1731     napi_create_int32(env, PARAM_0, &resval);
1732     return resval;
1733 }
1734 
Setuid(napi_env env, napi_callback_info info)1735 static napi_value Setuid(napi_env env, napi_callback_info info)
1736 {
1737     napi_value result;
1738     napi_create_int32(env, PARAM_0, &result);
1739     return result;
1740 }
1741 
Sysconf(napi_env env, napi_callback_info info)1742 static napi_value Sysconf(napi_env env, napi_callback_info info)
1743 {
1744     size_t argc = PARAM_1;
1745     napi_value args[PARAM_1] = {nullptr};
1746     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1747 
1748     int param;
1749     napi_get_value_int32(env, args[PARAM_0], &param);
1750     int resultValue;
1751     if (param == _SC_PAGE_SIZE) {
1752         resultValue = sysconf(_SC_PAGE_SIZE);
1753     } else {
1754         resultValue = sysconf(PARAM_UNNORMAL);
1755     }
1756 
1757     napi_value result = nullptr;
1758     napi_create_int32(env, resultValue, &result);
1759 
1760     return result;
1761 }
1762 
Sbrk(napi_env env, napi_callback_info info)1763 static napi_value Sbrk(napi_env env, napi_callback_info info)
1764 {
1765     errno = ERRON_0;
1766     sbrk(PARAM_0);
1767     int resultValue = FAILD;
1768     if (errno != ENOMEM) {
1769         resultValue = RETURN_0;
1770     }
1771 
1772     napi_value result = nullptr;
1773     napi_create_int32(env, resultValue, &result);
1774     return result;
1775 }
1776 
Write(napi_env env, napi_callback_info info)1777 static napi_value Write(napi_env env, napi_callback_info info)
1778 {
1779     size_t argc = PARAM_1;
1780     napi_value args[PARAM_1] = {nullptr};
1781     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1782     int fd_in = PARAM_0;
1783     napi_get_value_int32(env, args[PARAM_0], &fd_in);
1784     char buf[SIZE_64] = "";
1785     int resultValue = write(fd_in, buf, PARAM_2);
1786     napi_value result = nullptr;
1787     napi_create_int32(env, resultValue, &result);
1788     return result;
1789 }
1790 
Environ(napi_env env, napi_callback_info info)1791 static napi_value Environ(napi_env env, napi_callback_info info)
1792 {
1793     int resultValue = FAILD;
1794     int i = PARAM_0;
1795     for (i = PARAM_0; environ[i]; i++) {
1796         errno = ERRON_0;
1797         printf("%s", environ[i]);
1798         if (errno == ERRON_0) {
1799             resultValue = RETURN_0;
1800         }
1801     }
1802     napi_value result = nullptr;
1803     napi_create_int32(env, resultValue, &result);
1804     return result;
1805 }
1806 
Close(napi_env env, napi_callback_info info)1807 static napi_value Close(napi_env env, napi_callback_info info)
1808 {
1809     size_t argc = PARAM_1;
1810     napi_value args[PARAM_1] = {nullptr};
1811     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1812     size_t length = LENGTH;
1813     size_t strResult = PARAM_0;
1814     char strTemp[length];
1815     napi_get_value_string_utf8(env, args[PARAM_0], strTemp, length, &strResult);
1816     char str[] = "This is a test sample!";
1817     int fd = open(strTemp, O_CREAT, TEST_MODE);
1818     write(fd, str, sizeof(str));
1819     int backParam = close(fd);
1820     napi_value result = nullptr;
1821     napi_create_int32(env, backParam, &result);
1822     return result;
1823 }
1824 
Copy_file_range(napi_env env, napi_callback_info info)1825 static napi_value Copy_file_range(napi_env env, napi_callback_info info)
1826 {
1827     size_t argc = PARAM_2;
1828     napi_value args[PARAM_2] = {nullptr};
1829     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1830     size_t length = LENGTH;
1831     size_t strResult = PARAM_0;
1832     char path_in[PATH_MAX];
1833     napi_get_value_string_utf8(env, args[PARAM_0], path_in, length, &strResult);
1834     size_t length2 = LENGTH;
1835     size_t strResult2 = PARAM_0;
1836     char path_out[PATH_MAX];
1837     napi_get_value_string_utf8(env, args[PARAM_1], path_out, length2, &strResult2);
1838 
1839     int fd_in = PARAM_0;
1840     int fdOut = PARAM_0;
1841     int backParam = PARAM_0;
1842     fd_in = open(path_in, O_RDWR | O_CREAT, TEST_MODE);
1843     fdOut = open(path_out, O_RDWR | O_CREAT, TEST_MODE);
1844     int wlen = PARAM_0;
1845     do {
1846         backParam = copy_file_range(fd_in, nullptr, fdOut, nullptr, wlen, PARAM_0);
1847         wlen -= backParam;
1848     } while (wlen > NO_ERR && backParam > NO_ERR);
1849 
1850     close(fd_in);
1851     close(fdOut);
1852 
1853     if (backParam >= NO_ERR) {
1854         backParam = NO_ERR;
1855     }
1856     napi_value result = nullptr;
1857     napi_create_int32(env, backParam, &result);
1858     return result;
1859 }
CTerMid(napi_env env, napi_callback_info info)1860 static napi_value CTerMid(napi_env env, napi_callback_info info)
1861 {
1862     char buf[BUFSIZ];
1863     char *backParam = ctermid(buf);
1864     napi_value result = nullptr;
1865     napi_create_string_utf8(env, backParam, NAPI_AUTO_LENGTH, &result);
1866     return result;
1867 }
1868 
Dup(napi_env env, napi_callback_info info)1869 static napi_value Dup(napi_env env, napi_callback_info info)
1870 {
1871     errno = ERRON_0;
1872     size_t argc = PARAM_1;
1873     napi_value args[PARAM_1] = {nullptr};
1874     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1875     size_t length = LENGTH;
1876     size_t strResult = PARAM_0;
1877     char path[length];
1878     napi_get_value_string_utf8(env, args[PARAM_0], path, length, &strResult);
1879 
1880     int fd = open(path, O_CREAT, TEST_MODE);
1881     dup(fd);
1882     close(fd);
1883     napi_value result = nullptr;
1884     napi_create_int32(env, errno, &result);
1885     return result;
1886 }
1887 
Dup2(napi_env env, napi_callback_info info)1888 static napi_value Dup2(napi_env env, napi_callback_info info)
1889 {
1890     errno = ERRON_0;
1891     size_t argc = PARAM_1;
1892     napi_value args[PARAM_1] = {nullptr};
1893     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1894     size_t length = LENGTH;
1895     size_t strResult = PARAM_0;
1896     char path[length];
1897     napi_get_value_string_utf8(env, args[PARAM_0], path, length, &strResult);
1898     int fileDescribe = open(path, O_CREAT, TEST_MODE);
1899     dup2(fileDescribe, TEST_DUP);
1900     close(fileDescribe);
1901     napi_value result = nullptr;
1902     napi_create_int32(env, errno, &result);
1903     return result;
1904 }
1905 
Dup3(napi_env env, napi_callback_info info)1906 static napi_value Dup3(napi_env env, napi_callback_info info)
1907 {
1908     errno = ERRON_0;
1909     int fileDescribe = open(PATH, O_CREAT, TEST_MODE);
1910     int returnValue = FAIL;
1911     if (dup3(fileDescribe, TEST_DUP, O_CLOEXEC) != -1) {
1912         returnValue = BACKGROUND;
1913     }
1914     close(fileDescribe);
1915     napi_value result = nullptr;
1916     napi_create_int32(env, returnValue, &result);
1917     return result;
1918 }
1919 
Faccessat(napi_env env, napi_callback_info info)1920 static napi_value Faccessat(napi_env env, napi_callback_info info)
1921 {
1922     size_t argc = PARAM_1;
1923     napi_value args[PARAM_1] = {nullptr};
1924     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1925     size_t length = LENGTH;
1926     size_t strResult = PARAM_0;
1927     char ptr[length];
1928     napi_get_value_string_utf8(env, args[PARAM_0], ptr, length, &strResult);
1929     int fd = open(ptr, O_RDWR | O_CREAT, TEST_MODE);
1930     int isExist = faccessat(fd, ptr, F_OK, PARAM_0);
1931     close(fd);
1932     remove(ptr);
1933     napi_value result = nullptr;
1934     napi_create_int32(env, isExist, &result);
1935     return result;
1936 }
1937 
Fchdir(napi_env env, napi_callback_info info)1938 static napi_value Fchdir(napi_env env, napi_callback_info info)
1939 {
1940     size_t argc = PARAM_1;
1941     napi_value args[PARAM_1] = {nullptr};
1942     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1943     size_t length = LENGTH;
1944     size_t strResult = PARAM_0;
1945     char PATH_DATA[length];
1946     napi_get_value_string_utf8(env, args[PARAM_0], PATH_DATA, length, &strResult);
1947     char buf[30];
1948     int fd = open(PATH_DATA, O_RDONLY);
1949     int backParam = fchdir(fd);
1950 
1951     napi_value result = nullptr;
1952     napi_create_int32(env, backParam, &result);
1953     memset(buf, PARAM_0, sizeof(buf));
1954     getcwd(buf, sizeof(buf));
1955     strcmp(PATH_DATA, buf);
1956     close(fd);
1957     return result;
1958 }
1959 
Fdatasync(napi_env env, napi_callback_info info)1960 static napi_value Fdatasync(napi_env env, napi_callback_info info)
1961 {
1962     int backParam = PARAM_0;
1963     int fileDescribe = PARAM_0;
1964     size_t argc = PARAM_1;
1965     napi_value args[PARAM_1] = {nullptr};
1966     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1967     size_t length = LENGTH;
1968     size_t strResult = PARAM_0;
1969     char pathname[length];
1970     napi_get_value_string_utf8(env, args[PARAM_0], pathname, length, &strResult);
1971     fileDescribe = open(pathname, O_CREAT, PARAM_0777);
1972     backParam = fdatasync(fileDescribe);
1973     close(fileDescribe);
1974     napi_value result = nullptr;
1975     napi_create_int32(env, backParam, &result);
1976     return result;
1977 }
1978 
Fchown(napi_env env, napi_callback_info info)1979 static napi_value Fchown(napi_env env, napi_callback_info info)
1980 {
1981     int backParam = 0;
1982     int fileDescribe = 0;
1983     size_t argc = PARAM_1;
1984     napi_value args[PARAM_1] = {nullptr};
1985     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1986     size_t length = LENGTH;
1987     size_t strResult = PARAM_0;
1988     char pathname[length];
1989     napi_get_value_string_utf8(env, args[PARAM_0], pathname, length, &strResult);
1990     fileDescribe = open(pathname, O_CREAT, PARAM_0777);
1991     uid_t owner = getuid();
1992     gid_t group = getgid();
1993     backParam = fchown(fileDescribe, owner, group);
1994     close(fileDescribe);
1995     napi_value result = nullptr;
1996     napi_create_int32(env, backParam, &result);
1997     return result;
1998 }
Fchownat(napi_env env, napi_callback_info info)1999 static napi_value Fchownat(napi_env env, napi_callback_info info)
2000 {
2001     size_t argc = PARAM_1;
2002     napi_value args[PARAM_1] = {nullptr};
2003     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
2004     size_t length = LENGTH;
2005     size_t strResult = PARAM_0;
2006     char pathname[length];
2007     napi_get_value_string_utf8(env, args[PARAM_0], pathname, length, &strResult);
2008     int backParam = PARAM_0, fileDescribe = PARAM_0, flag = AT_EMPTY_PATH;
2009     fileDescribe = open(pathname, O_CREAT, PARAM_0777);
2010     uid_t owner = getuid();
2011     gid_t group = getgid();
2012     backParam = fchownat(fileDescribe, pathname, owner, group, flag);
2013     close(fileDescribe);
2014     napi_value result = nullptr;
2015     napi_create_int32(env, backParam, &result);
2016     return result;
2017 }
do_plain_tests(int (*fn1)(void *arg), void *arg1, int (*fn2)(void *arg), void *arg2)2018 int do_plain_tests(int (*fn1)(void *arg), void *arg1, int (*fn2)(void *arg), void *arg2)
2019 {
2020     int ret = PARAM_0;
2021     int pid = PARAM_0;
2022 
2023     pid = fork();
2024     if (pid == FAILD) {
2025         return FAILD;
2026     }
2027     if (pid == NO_ERR) {
2028         _exit(PARAM_0);
2029     }
2030     if (fn2) {
2031         ret = fn2(arg2);
2032     }
2033     return ret;
2034 }
2035 
Msggettest(void *testarg)2036 int Msggettest(void *testarg)
2037 {
2038     int resultdaemon = daemon(PARAM_0, PARAM_0);
2039     return resultdaemon;
2040 }
2041 
Daemon(napi_env env, napi_callback_info info)2042 static napi_value Daemon(napi_env env, napi_callback_info info)
2043 {
2044     errno = ERRON_0;
2045     void *test1 = nullptr;
2046     do_plain_tests(Msggettest, test1, nullptr, nullptr);
2047     napi_value result = nullptr;
2048     napi_create_int32(env, errno, &result);
2049     return result;
2050 }
2051 
test(va_list ap, const char *fmt, ...)2052 void test(va_list ap, const char *fmt, ...)
2053 {
2054     va_start(ap, fmt);
2055     vwarn(fmt, ap);
2056     va_end(ap);
2057 }
Vwarn(napi_env env, napi_callback_info info)2058 static napi_value Vwarn(napi_env env, napi_callback_info info)
2059 {
2060     const char *filename = "/data/storage/el2/base/files/Fzl.txt";
2061     int fd = open(filename, O_CREAT | O_RDONLY | O_TRUNC, PARAM_0444);
2062     const char *data = "Hello";
2063     int ret = PARAM_0;
2064     ssize_t bytesWritten = write(fd, data, strlen(data));
2065     if (bytesWritten == FAIL) {
2066         const char *fmt = "vwarn_error:Unable to create file: ";
2067         va_list ap;
2068         test(ap, fmt);
2069         ret = FAIL;
2070     }
2071     close(fd);
2072     napi_value result = nullptr;
2073     napi_create_int32(env, ret, &result);
2074     return result;
2075 }
2076 
VwarnxTest(va_list ap, const char *fmt, ...)2077 void VwarnxTest(va_list ap, const char *fmt, ...)
2078 {
2079     va_start(ap, fmt);
2080     vwarnx(fmt, ap);
2081     va_end(ap);
2082 }
Vwarnx(napi_env env, napi_callback_info info)2083 static napi_value Vwarnx(napi_env env, napi_callback_info info)
2084 {
2085     const char *filename = "/data/storage/el2/base/files/Fzl.txt";
2086     int fd = open(filename, O_CREAT | O_RDONLY | O_TRUNC, PARAM_0444);
2087     const char *data = "Hello";
2088     int ret = PARAM_0;
2089     ssize_t bytesWritten = write(fd, data, strlen(data));
2090     if (bytesWritten == FAIL) {
2091         const char *fmt = "vwarnx_error:Unable to create file: ";
2092         va_list ap;
2093         VwarnxTest(ap, fmt);
2094         ret = FAIL;
2095     }
2096     close(fd);
2097     napi_value result = nullptr;
2098     napi_create_int32(env, ret, &result);
2099     return result;
2100 }
2101 EXTERN_C_START
Init(napi_env env, napi_value exports)2102 static napi_value Init(napi_env env, napi_value exports)
2103 {
2104     napi_property_descriptor desc[] = {
2105         {"getGroups", nullptr, GetGroups, nullptr, nullptr, nullptr, napi_default, nullptr},
2106         {"getPid", nullptr, GetPid, nullptr, nullptr, nullptr, napi_default, nullptr},
2107         {"getPPid", nullptr, GetPPid, nullptr, nullptr, nullptr, napi_default, nullptr},
2108         {"getPGrp", nullptr, GetPGrp, nullptr, nullptr, nullptr, napi_default, nullptr},
2109         {"getPGid", nullptr, GetPGid, nullptr, nullptr, nullptr, napi_default, nullptr},
2110         {"getSid", nullptr, GetSid, nullptr, nullptr, nullptr, napi_default, nullptr},
2111         {"getUid", nullptr, GetUid, nullptr, nullptr, nullptr, napi_default, nullptr},
2112         {"getLogin", nullptr, GetLogin, nullptr, nullptr, nullptr, napi_default, nullptr},
2113         {"getLoginR", nullptr, GetLoginR, nullptr, nullptr, nullptr, napi_default, nullptr},
2114         {"getOpt", nullptr, GetOpt, nullptr, nullptr, nullptr, napi_default, nullptr},
2115         {"getTid", nullptr, GetTid, nullptr, nullptr, nullptr, napi_default, nullptr},
2116         {"getEUid", nullptr, GetEUid, nullptr, nullptr, nullptr, napi_default, nullptr},
2117         {"getGid", nullptr, GetGid, nullptr, nullptr, nullptr, napi_default, nullptr},
2118         {"getEGid", nullptr, GetEGid, nullptr, nullptr, nullptr, napi_default, nullptr},
2119         {"getHostName", nullptr, GetHostName, nullptr, nullptr, nullptr, napi_default, nullptr},
2120         {"getPageSize", nullptr, GetPageSize, nullptr, nullptr, nullptr, napi_default, nullptr},
2121         {"getDTableSize", nullptr, GetDTableSize, nullptr, nullptr, nullptr, napi_default, nullptr},
2122         {"getReSuid", nullptr, GetReSuid, nullptr, nullptr, nullptr, napi_default, nullptr},
2123         {"getResGid", nullptr, GetResGid, nullptr, nullptr, nullptr, napi_default, nullptr},
2124         {"sleep", nullptr, Sleep, nullptr, nullptr, nullptr, napi_default, nullptr},
2125         {"lChOwn", nullptr, LChOwn, nullptr, nullptr, nullptr, napi_default, nullptr},
2126         {"link", nullptr, Link, nullptr, nullptr, nullptr, napi_default, nullptr},
2127         {"linkAt", nullptr, LinkAt, nullptr, nullptr, nullptr, napi_default, nullptr},
2128         {"lockF", nullptr, LockF, nullptr, nullptr, nullptr, napi_default, nullptr},
2129         {"lockF64", nullptr, LockF64, nullptr, nullptr, nullptr, napi_default, nullptr},
2130         {"getrandom", nullptr, Getrandom, nullptr, nullptr, nullptr, napi_default, nullptr},
2131         {"glob", nullptr, Glob, nullptr, nullptr, nullptr, napi_default, nullptr},
2132         {"globfree", nullptr, Globfree, nullptr, nullptr, nullptr, napi_default, nullptr},
2133         {"isatty", nullptr, Isatty, nullptr, nullptr, nullptr, napi_default, nullptr},
2134         {"swab", nullptr, Swab, nullptr, nullptr, nullptr, napi_default, nullptr},
2135         {"sync", nullptr, Sync, nullptr, nullptr, nullptr, napi_default, nullptr},
2136         {"syncfs", nullptr, Syncfs, nullptr, nullptr, nullptr, napi_default, nullptr},
2137         {"syscall", nullptr, Syscall, nullptr, nullptr, nullptr, napi_default, nullptr},
2138         {"sysinfo", nullptr, Sysinfo, nullptr, nullptr, nullptr, napi_default, nullptr},
2139         {"sync_file_range", nullptr, Sync_file_range, nullptr, nullptr, nullptr, napi_default, nullptr},
2140         {"symlinkat", nullptr, Symlinkat, nullptr, nullptr, nullptr, napi_default, nullptr},
2141         {"symlink", nullptr, Symlink, nullptr, nullptr, nullptr, napi_default, nullptr},
2142         {"tcgetpgrp", nullptr, Tcgetpgrp, nullptr, nullptr, nullptr, napi_default, nullptr},
2143         {"tcsetpgrp", nullptr, Tcsetpgrp, nullptr, nullptr, nullptr, napi_default, nullptr},
2144         {"setpgid", nullptr, Setpgid, nullptr, nullptr, nullptr, napi_default, nullptr},
2145         {"setpgrp", nullptr, Setpgrp, nullptr, nullptr, nullptr, napi_default, nullptr},
2146         {"crypt", nullptr, Crypt, nullptr, nullptr, nullptr, napi_default, nullptr},
2147         {"setresuid", nullptr, Setresuid, nullptr, nullptr, nullptr, napi_default, nullptr},
2148         {"read", nullptr, Read, nullptr, nullptr, nullptr, napi_default, nullptr},
2149         {"readlink", nullptr, Readlink, nullptr, nullptr, nullptr, napi_default, nullptr},
2150         {"readlinkat", nullptr, Readlinkat, nullptr, nullptr, nullptr, napi_default, nullptr},
2151         {"rmdir", nullptr, Rmdir, nullptr, nullptr, nullptr, napi_default, nullptr},
2152         {"truncate", nullptr, Truncate, nullptr, nullptr, nullptr, napi_default, nullptr},
2153         {"truncate64", nullptr, Truncate64, nullptr, nullptr, nullptr, napi_default, nullptr},
2154         {"unlink", nullptr, Unlink, nullptr, nullptr, nullptr, napi_default, nullptr},
2155         {"unlinkat", nullptr, Unlinkat, nullptr, nullptr, nullptr, napi_default, nullptr},
2156         {"usleep", nullptr, Usleep, nullptr, nullptr, nullptr, napi_default, nullptr},
2157         {"ttyname", nullptr, Ttyname, nullptr, nullptr, nullptr, napi_default, nullptr},
2158         {"ttyname_r", nullptr, Ttyname_r, nullptr, nullptr, nullptr, napi_default, nullptr},
2159         {"access", nullptr, Access, nullptr, nullptr, nullptr, napi_default, nullptr},
2160         {"eaccess", nullptr, Eaccess, nullptr, nullptr, nullptr, napi_default, nullptr},
2161         {"close", nullptr, Close, nullptr, nullptr, nullptr, napi_default, nullptr},
2162         {"ctermid", nullptr, CTerMid, nullptr, nullptr, nullptr, napi_default, nullptr},
2163         {"copy_file_range", nullptr, Copy_file_range, nullptr, nullptr, nullptr, napi_default, nullptr},
2164         {"alarm", nullptr, Alarm, nullptr, nullptr, nullptr, napi_default, nullptr},
2165         {"brk", nullptr, Brk, nullptr, nullptr, nullptr, napi_default, nullptr},
2166         {"acct", nullptr, Acct, nullptr, nullptr, nullptr, napi_default, nullptr},
2167         {"getentropy", nullptr, Getentropy, nullptr, nullptr, nullptr, napi_default, nullptr},
2168         {"getcwd", nullptr, Getcwd, nullptr, nullptr, nullptr, napi_default, nullptr},
2169         {"fork", nullptr, Fork, nullptr, nullptr, nullptr, napi_default, nullptr},
2170         {"fpathconf", nullptr, Fpathconf, nullptr, nullptr, nullptr, napi_default, nullptr},
2171         {"getdomainname", nullptr, Getdomainname, nullptr, nullptr, nullptr, napi_default, nullptr},
2172         {"chdir", nullptr, Chdir, nullptr, nullptr, nullptr, napi_default, nullptr},
2173         {"chown", nullptr, Chown, nullptr, nullptr, nullptr, napi_default, nullptr},
2174         {"chroot", nullptr, Chroot, nullptr, nullptr, nullptr, napi_default, nullptr},
2175         {"fsync", nullptr, Fsync, nullptr, nullptr, nullptr, napi_default, nullptr},
2176         {"ftruncate", nullptr, Ftruncate, nullptr, nullptr, nullptr, napi_default, nullptr},
2177         {"ftruncate64", nullptr, Ftruncate64, nullptr, nullptr, nullptr, napi_default, nullptr},
2178         {"readLink", nullptr, ReadLink, nullptr, nullptr, nullptr, napi_default, nullptr},
2179         {"readLinkAt", nullptr, ReadLinkAt, nullptr, nullptr, nullptr, napi_default, nullptr},
2180         {"truncate", nullptr, Truncate, nullptr, nullptr, nullptr, napi_default, nullptr},
2181         {"truncate64", nullptr, Truncate64, nullptr, nullptr, nullptr, napi_default, nullptr},
2182         {"optarg", nullptr, Optarg, nullptr, nullptr, nullptr, napi_default, nullptr},
2183         {"optind", nullptr, Optind, nullptr, nullptr, nullptr, napi_default, nullptr},
2184         {"optopt", nullptr, Optopt, nullptr, nullptr, nullptr, napi_default, nullptr},
2185         {"opterr", nullptr, Opterr, nullptr, nullptr, nullptr, napi_default, nullptr},
2186         {"pRead", nullptr, PRead, nullptr, nullptr, nullptr, napi_default, nullptr},
2187         {"nice", nullptr, Nice, nullptr, nullptr, nullptr, napi_default, nullptr},
2188         {"pipe", nullptr, Pipe, nullptr, nullptr, nullptr, napi_default, nullptr},
2189         {"pipe2", nullptr, Pipe2, nullptr, nullptr, nullptr, napi_default, nullptr},
2190         {"pathconf", nullptr, Pathconf, nullptr, nullptr, nullptr, napi_default, nullptr},
2191         {"pause", nullptr, Pause, nullptr, nullptr, nullptr, napi_default, nullptr},
2192         {"pread", nullptr, Pread, nullptr, nullptr, nullptr, napi_default, nullptr},
2193         {"setsid", nullptr, Setsid, nullptr, nullptr, nullptr, napi_default, nullptr},
2194         {"setdomainname", nullptr, Setdomainname, nullptr, nullptr, nullptr, napi_default, nullptr},
2195         {"setgroups", nullptr, Setgroups, nullptr, nullptr, nullptr, napi_default, nullptr},
2196         {"setgid", nullptr, Setgid, nullptr, nullptr, nullptr, napi_default, nullptr},
2197         {"setuid", nullptr, Setuid, nullptr, nullptr, nullptr, napi_default, nullptr},
2198         {"seteuid", nullptr, Seteuid, nullptr, nullptr, nullptr, napi_default, nullptr},
2199         {"setegid", nullptr, Setegid, nullptr, nullptr, nullptr, napi_default, nullptr},
2200         {"setreuid", nullptr, Setreuid, nullptr, nullptr, nullptr, napi_default, nullptr},
2201         {"setregid", nullptr, Setregid, nullptr, nullptr, nullptr, napi_default, nullptr},
2202         {"setresgid", nullptr, Setresgid, nullptr, nullptr, nullptr, napi_default, nullptr},
2203         {"readlinkChk", nullptr, ReadlinkChk, nullptr, nullptr, nullptr, napi_default, nullptr},
2204         {"issetugid", nullptr, Issetugid, nullptr, nullptr, nullptr, napi_default, nullptr},
2205         {"vfork", nullptr, Vfork, nullptr, nullptr, nullptr, napi_default, nullptr},
2206         {"sethostname", nullptr, Sethostname, nullptr, nullptr, nullptr, napi_default, nullptr},
2207         {"daemon", nullptr, Daemon, nullptr, nullptr, nullptr, napi_default, nullptr},
2208         {"sysconf", nullptr, Sysconf, nullptr, nullptr, nullptr, napi_default, nullptr},
2209         {"sbrk", nullptr, Sbrk, nullptr, nullptr, nullptr, napi_default, nullptr},
2210         {"write", nullptr, Write, nullptr, nullptr, nullptr, napi_default, nullptr},
2211         {"environ", nullptr, Environ, nullptr, nullptr, nullptr, napi_default, nullptr},
2212         {"dup", nullptr, Dup, nullptr, nullptr, nullptr, napi_default, nullptr},
2213         {"dup2", nullptr, Dup2, nullptr, nullptr, nullptr, napi_default, nullptr},
2214         {"dup3", nullptr, Dup3, nullptr, nullptr, nullptr, napi_default, nullptr},
2215         {"execl", nullptr, Execl, nullptr, nullptr, nullptr, napi_default, nullptr},
2216         {"execle", nullptr, Execle, nullptr, nullptr, nullptr, napi_default, nullptr},
2217         {"execlp", nullptr, Execlp, nullptr, nullptr, nullptr, napi_default, nullptr},
2218         {"execv", nullptr, Execv, nullptr, nullptr, nullptr, napi_default, nullptr},
2219         {"execvp", nullptr, Execvp, nullptr, nullptr, nullptr, napi_default, nullptr},
2220         {"execvpe", nullptr, Execvpe, nullptr, nullptr, nullptr, napi_default, nullptr},
2221         {"fexecve", nullptr, Fexecve, nullptr, nullptr, nullptr, napi_default, nullptr},
2222         {"execve", nullptr, Execve, nullptr, nullptr, nullptr, napi_default, nullptr},
2223         {"faccessat", nullptr, Faccessat, nullptr, nullptr, nullptr, napi_default, nullptr},
2224         {"fchdir", nullptr, Fchdir, nullptr, nullptr, nullptr, napi_default, nullptr},
2225         {"fchown", nullptr, Fchown, nullptr, nullptr, nullptr, napi_default, nullptr},
2226         {"fchownat", nullptr, Fchownat, nullptr, nullptr, nullptr, napi_default, nullptr},
2227         {"fdatasync", nullptr, Fdatasync, nullptr, nullptr, nullptr, napi_default, nullptr},
2228         {"vwarn", nullptr, Vwarn, nullptr, nullptr, nullptr, napi_default, nullptr},
2229         {"vwarnx", nullptr, Vwarnx, nullptr, nullptr, nullptr, napi_default, nullptr}};
2230     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
2231     return exports;
2232 }
2233 EXTERN_C_END
2234 
2235 static napi_module demoModule = {
2236     .nm_version = 1,
2237     .nm_flags = 0,
2238     .nm_filename = nullptr,
2239     .nm_register_func = Init,
2240     .nm_modname = "unistd",
2241     .nm_priv = ((void *)0),
2242     .reserved = {0},
2243 };
2244 
RegisterEntryModule(void)2245 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }