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 <cerrno>
20 #include <cstdio>
21 #include <cstdlib>
22 #include <cstring>
23 #include <ctime>
24 #include <fcntl.h>
25 #include <string>
26 #include <unistd.h>
27 #include <utmp.h>
28 #define ERRON_0 0
29 #define BUF_SIZE 256
30 #define EXPECTERROR (-1)
31 #define NO_ERR 0
32 #define FAIL (-1)
33 #define ARRY_MAX 128
34 #define PARAM_0 0
35 #define PARAM_1 1
36 #define PARAM_2 2
37 #define PARAM_3 3
38 #define PARAM_4 4
39 #define PARAM_5 5
40 #define PARAM_6 6
41 #define PARAM_7 7
42 #define PARAM_10 10
43 #define PARAM_UNNORMAL (-1)
44 #define RETURN_0 0
45 #define RETURN_1 1
46 #define FAILD (-1)
47 #define ERRNO_0 0
48 #define SIZE_0 0
49 #define SIZE_5 5
50 #define SIZE_8 8
51 #define SIZE_10 10
52 #define SIZE_16 16
53 #define SIZE_20 20
54 #define SIZE_32 32
55 #define SIZE_64 64
56 #define PARAM_0777 0777
57 #define SIZE_1024 1024
58 #define SUCCESS 1
59 #define INIT 0
60 #define DEF_VALUE (-2)
61 #define FAILED (-1)
62 #define STAT_SIZE 64
63 #define SEED 0
64 #define TEST_NUM 10
65 #define LIB_BUFF_SIZE 64
66 
Ldiv(napi_env env, napi_callback_info info)67 static napi_value Ldiv(napi_env env, napi_callback_info info)
68 {
69     size_t argc = PARAM_2;
70     napi_value args[2] = {nullptr};
71     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
72     int num, den;
73     napi_get_value_int32(env, args[0], &num);
74     napi_get_value_int32(env, args[1], &den);
75     ldiv_t ret = ldiv(num, den);
76     napi_value result = nullptr;
77     napi_create_object(env, &result);
78     napi_value quot = nullptr;
79     napi_value rem = nullptr;
80     int a = ret.quot;
81     int b = ret.rem;
82     napi_create_int32(env, a, &quot);
83     napi_set_named_property(env, result, "quot", quot);
84     napi_create_int32(env, b, &rem);
85     napi_set_named_property(env, result, "rem", rem);
86     return result;
87 }
88 
LLdiv(napi_env env, napi_callback_info info)89 static napi_value LLdiv(napi_env env, napi_callback_info info)
90 {
91     size_t argc = PARAM_2;
92     napi_value args[2] = {nullptr};
93     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
94     int num, den;
95     napi_get_value_int32(env, args[0], &num);
96     napi_get_value_int32(env, args[1], &den);
97     lldiv_t ret = lldiv(num, den);
98     napi_value result = nullptr;
99     napi_create_object(env, &result);
100     napi_value quot = nullptr;
101     napi_value rem = nullptr;
102     int a = ret.quot;
103     int b = ret.rem;
104     napi_create_int32(env, a, &quot);
105     napi_set_named_property(env, result, "quot", quot);
106     napi_create_int32(env, b, &rem);
107     napi_set_named_property(env, result, "rem", rem);
108     return result;
109 }
110 
Lcong48(napi_env env, napi_callback_info info)111 static napi_value Lcong48(napi_env env, napi_callback_info info)
112 {
113     size_t argc = PARAM_7;
114     napi_value args[7] = {nullptr};
115     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
116     uint32_t a;
117     uint32_t b;
118     uint32_t c;
119     uint32_t d;
120     uint32_t e;
121     uint32_t f;
122     uint32_t g;
123     napi_get_value_uint32(env, args[0], &a);
124     napi_get_value_uint32(env, args[1], &b);
125     napi_get_value_uint32(env, args[PARAM_2], &c);
126     napi_get_value_uint32(env, args[PARAM_3], &d);
127     napi_get_value_uint32(env, args[PARAM_4], &e);
128     napi_get_value_uint32(env, args[PARAM_5], &f);
129     napi_get_value_uint32(env, args[PARAM_6], &g);
130     unsigned short xSubFirst[7] = {(unsigned short)a, (unsigned short)b, (unsigned short)c, (unsigned short)d,
131                                    (unsigned short)e, (unsigned short)f, (unsigned short)g};
132     long randValue = jrand48(xSubFirst);
133     napi_value result = nullptr;
134     napi_create_int32(env, static_cast<int>(randValue), &result);
135     return result;
136 }
137 
Rand(napi_env env, napi_callback_info info)138 static napi_value Rand(napi_env env, napi_callback_info info)
139 {
140     size_t argc = PARAM_1;
141     napi_value args[1] = {nullptr};
142     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
143     int param;
144     napi_get_value_int32(env, args[0], &param);
145     int resultValue = FAILD;
146     if (param == PARAM_0) {
147         int randValue = rand();
148         if (randValue < RAND_MAX) {
149             resultValue = RETURN_0;
150         }
151     } else {
152         int randValue = rand();
153         if (randValue > PARAM_0) {
154             resultValue = RETURN_0;
155         }
156     }
157     napi_value result = nullptr;
158     napi_create_int32(env, resultValue, &result);
159     return result;
160 }
161 
LLabs(napi_env env, napi_callback_info info)162 static napi_value LLabs(napi_env env, napi_callback_info info)
163 {
164     size_t argc = PARAM_1;
165     napi_value args[1] = {nullptr};
166     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
167     int a;
168     napi_get_value_int32(env, args[0], &a);
169     long randValue = llabs(a);
170     napi_value result = nullptr;
171     napi_create_int32(env, randValue, &result);
172     return result;
173 }
174 
Labs(napi_env env, napi_callback_info info)175 static napi_value Labs(napi_env env, napi_callback_info info)
176 {
177     size_t argc = PARAM_1;
178     napi_value args[1] = {nullptr};
179     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
180     int a;
181     napi_get_value_int32(env, args[0], &a);
182     long randValue = labs(a);
183     napi_value result = nullptr;
184     napi_create_int32(env, randValue, &result);
185     return result;
186 }
187 
RandR(napi_env env, napi_callback_info info)188 static napi_value RandR(napi_env env, napi_callback_info info)
189 {
190     size_t argc = PARAM_1;
191     napi_value args[1] = {nullptr};
192     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
193     int param;
194     napi_get_value_int32(env, args[0], &param);
195     int resultValue = FAILD;
196     if (param == PARAM_0) {
197         unsigned seed = getpid();
198         int randR_value = rand_r(&seed);
199         if (randR_value < RAND_MAX) {
200             resultValue = RETURN_0;
201         }
202     } else {
203         unsigned seed = getpid();
204         int randR_value = rand_r(&seed);
205         if (randR_value > PARAM_0) {
206             resultValue = RETURN_0;
207         }
208     }
209     napi_value result = nullptr;
210     napi_create_int32(env, resultValue, &result);
211     return result;
212 }
213 
Random(napi_env env, napi_callback_info info)214 static napi_value Random(napi_env env, napi_callback_info info)
215 {
216     int randomValue = random();
217     napi_value result = nullptr;
218     napi_create_int32(env, randomValue, &result);
219     return result;
220 }
221 
Seed48(napi_env env, napi_callback_info info)222 static napi_value Seed48(napi_env env, napi_callback_info info)
223 {
224     size_t argc = PARAM_3;
225     napi_value args[3] = {nullptr};
226     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
227     uint32_t first;
228     uint32_t second;
229     uint32_t third;
230     napi_get_value_uint32(env, args[0], &first);
231     napi_get_value_uint32(env, args[1], &second);
232     napi_get_value_uint32(env, args[PARAM_2], &third);
233     unsigned short int *p,
234         seedV[3] = {(unsigned short int)first, (unsigned short int)second, (unsigned short int)third};
235     p = seed48(seedV);
236     napi_value result;
237     napi_create_double(env, *p, &result);
238     return result;
239 }
Srand(napi_env env, napi_callback_info info)240 static napi_value Srand(napi_env env, napi_callback_info info)
241 {
242     size_t argc = PARAM_1;
243     napi_value args[1] = {nullptr};
244     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
245     int valueZero;
246     napi_get_value_int32(env, args[0], &valueZero);
247     if (valueZero == PARAM_0) {
248         int timeValue = time(nullptr);
249         srand(timeValue);
250     } else {
251         srand(valueZero);
252     }
253     int sin_value;
254     sin_value = rand();
255     napi_value result = nullptr;
256     napi_create_int32(env, sin_value, &result);
257     return result;
258 }
Srand48(napi_env env, napi_callback_info info)259 static napi_value Srand48(napi_env env, napi_callback_info info)
260 {
261     size_t argc = PARAM_1;
262     napi_value args[1] = {nullptr};
263     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
264     int valueZero;
265     napi_get_value_int32(env, args[0], &valueZero);
266     if (valueZero == PARAM_0) {
267         int timeValue = time(nullptr);
268         srand48(timeValue);
269     } else {
270         srand48(valueZero);
271     }
272     int sin_value;
273     sin_value = rand();
274     napi_value result = nullptr;
275     napi_create_int32(env, sin_value, &result);
276     return result;
277 }
Srandom(napi_env env, napi_callback_info info)278 static napi_value Srandom(napi_env env, napi_callback_info info)
279 {
280     size_t argc = PARAM_1;
281     napi_value args[1] = {nullptr};
282     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
283     int valueZero;
284     napi_get_value_int32(env, args[0], &valueZero);
285     if (valueZero == PARAM_0) {
286         int timeValue = time(nullptr);
287         srandom(timeValue);
288     } else {
289         srandom(valueZero);
290     }
291     int sin_value;
292     sin_value = rand();
293     napi_value result = nullptr;
294     napi_create_int32(env, sin_value, &result);
295     return result;
296 }
297 
Strtod(napi_env env, napi_callback_info info)298 static napi_value Strtod(napi_env env, napi_callback_info info)
299 {
300     size_t argc = PARAM_1;
301     napi_value args[1] = {nullptr};
302     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
303     char *valueZero = NapiHelper::GetString(env, args[0]);
304     double strtod_value = strtod(valueZero, nullptr);
305     napi_value result = nullptr;
306     napi_create_double(env, strtod_value, &result);
307     return result;
308 }
309 
Strtof(napi_env env, napi_callback_info info)310 static napi_value Strtof(napi_env env, napi_callback_info info)
311 {
312     size_t argc = PARAM_1;
313     napi_value args[1] = {nullptr};
314     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
315     char *valueZero = NapiHelper::GetString(env, args[0]);
316     double strTofValue = strtof(valueZero, nullptr);
317     napi_value result = nullptr;
318     napi_create_double(env, strTofValue, &result);
319 
320     return result;
321 }
322 
Strtol(napi_env env, napi_callback_info info)323 static napi_value Strtol(napi_env env, napi_callback_info info)
324 {
325     size_t argc = PARAM_2;
326     napi_value args[2] = {nullptr};
327     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
328 
329     char *valueZero = NapiHelper::GetString(env, args[0]);
330     int valueFirst;
331     napi_get_value_int32(env, args[1], &valueFirst);
332     double strTolValue = strtol(valueZero, nullptr, valueFirst);
333 
334     napi_value result = nullptr;
335     napi_create_double(env, strTolValue, &result);
336 
337     return result;
338 }
339 
Strtold(napi_env env, napi_callback_info info)340 static napi_value Strtold(napi_env env, napi_callback_info info)
341 {
342     size_t argc = PARAM_1;
343     napi_value args[1] = {nullptr};
344     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
345     char *valueZero = NapiHelper::GetString(env, args[0]);
346     double strToldValue = strtold(valueZero, nullptr);
347 
348     napi_value result = nullptr;
349     napi_create_double(env, strToldValue, &result);
350 
351     return result;
352 }
353 
Strtoll(napi_env env, napi_callback_info info)354 static napi_value Strtoll(napi_env env, napi_callback_info info)
355 {
356     size_t argc = PARAM_2;
357     napi_value args[2] = {nullptr};
358     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
359 
360     char *valueZero = NapiHelper::GetString(env, args[0]);
361     int valueFirst;
362     napi_get_value_int32(env, args[1], &valueFirst);
363     double strTollValue = strtoll(valueZero, nullptr, valueFirst);
364 
365     napi_value result = nullptr;
366     napi_create_double(env, strTollValue, &result);
367 
368     return result;
369 }
370 
Strtoul(napi_env env, napi_callback_info info)371 static napi_value Strtoul(napi_env env, napi_callback_info info)
372 {
373     size_t argc = PARAM_2;
374     napi_value args[2] = {nullptr};
375     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
376 
377     char *valueZero = NapiHelper::GetString(env, args[0]);
378     int valueFirst;
379     napi_get_value_int32(env, args[1], &valueFirst);
380     double strTouLValue = strtoul(valueZero, nullptr, valueFirst);
381 
382     napi_value result = nullptr;
383     napi_create_double(env, strTouLValue, &result);
384 
385     return result;
386 }
387 
Strtoull(napi_env env, napi_callback_info info)388 static napi_value Strtoull(napi_env env, napi_callback_info info)
389 {
390     size_t argc = PARAM_2;
391     napi_value args[2] = {nullptr};
392     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
393 
394     char *valueZero = NapiHelper::GetString(env, args[0]);
395     int valueFirst;
396     napi_get_value_int32(env, args[1], &valueFirst);
397     double strTouLlValue = strtoull(valueZero, nullptr, valueFirst);
398 
399     napi_value result = nullptr;
400     napi_create_double(env, strTouLlValue, &result);
401 
402     return result;
403 }
404 
Setenv(napi_env env, napi_callback_info info)405 static napi_value Setenv(napi_env env, napi_callback_info info)
406 {
407     size_t argc = PARAM_3;
408     napi_value args[3] = {nullptr};
409     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
410     char *valueFirst = NapiHelper::GetString(env, args[0]);
411     char *valueSecond = NapiHelper::GetString(env, args[1]);
412     int valueThree;
413     napi_get_value_int32(env, args[PARAM_2], &valueThree);
414     int setValue = setenv(valueFirst, valueSecond, valueThree);
415     napi_value result;
416     napi_create_int32(env, setValue, &result);
417     return result;
418 }
GetLoadAvg(napi_env env, napi_callback_info info)419 static napi_value GetLoadAvg(napi_env env, napi_callback_info info)
420 {
421     double avgs[3];
422     int getInfo = getloadavg(avgs, PARAM_3);
423     napi_value result = nullptr;
424     napi_create_double(env, getInfo, &result);
425     return result;
426 }
427 
MkTemp(napi_env env, napi_callback_info info)428 static napi_value MkTemp(napi_env env, napi_callback_info info)
429 {
430     errno = ERRON_0;
431     size_t argc = PARAM_1;
432     napi_value args[1] = {nullptr};
433     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
434     int flag = PARAM_0;
435     napi_get_value_int32(env, args[0], &flag);
436     char tpl[BUFSIZ];
437     switch (flag) {
438     case PARAM_0:
439         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX");
440         break;
441     case PARAM_1:
442         strcpy(tpl, "/data/storage/el2/base/files/tempXXX");
443         break;
444     case PARAM_2:
445         strcpy(tpl, "/data/storage/el2/base/files/temp");
446         break;
447     default:
448         strcpy(tpl, "/data/storage/el2/base/files/temp");
449         break;
450     }
451     char *ret = mktemp(tpl);
452 
453     napi_value result = nullptr;
454     if (*ret == '\0') {
455         napi_create_int32(env, FAILD, &result);
456     } else {
457         napi_create_int32(env, RETURN_0, &result);
458     }
459     unlink(tpl);
460     return result;
461 }
462 
MkSTemp(napi_env env, napi_callback_info info)463 static napi_value MkSTemp(napi_env env, napi_callback_info info)
464 {
465     size_t argc = PARAM_1;
466     napi_value args[1] = {nullptr};
467     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
468     int flag = PARAM_0;
469     napi_get_value_int32(env, args[0], &flag);
470     char tpl[BUFSIZ];
471     switch (flag) {
472     case PARAM_0:
473         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX");
474         break;
475     case PARAM_1:
476         strcpy(tpl, "/data/storage/el2/base/files/tempXXX");
477         break;
478     case PARAM_2:
479         strcpy(tpl, "/data/storage/el2/base/files/temp");
480         break;
481     default:
482         strcpy(tpl, "/data/storage/el2/base/files/temp");
483         break;
484     }
485     int mktfp = mkstemp(tpl);
486     napi_value result = nullptr;
487     if (mktfp == PARAM_UNNORMAL) {
488         napi_create_int32(env, FAILD, &result);
489     } else {
490         napi_create_int32(env, RETURN_0, &result);
491     }
492     unlink(tpl);
493     return result;
494 }
495 
MkSTempS(napi_env env, napi_callback_info info)496 static napi_value MkSTempS(napi_env env, napi_callback_info info)
497 {
498     size_t argc = PARAM_1;
499     napi_value args[1] = {nullptr};
500     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
501     int flag = PARAM_0;
502     napi_get_value_int32(env, args[0], &flag);
503     char tpl[BUFSIZ];
504     switch (flag) {
505     case PARAM_0:
506         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX.dat");
507         break;
508     case PARAM_1:
509         strcpy(tpl, "/data/storage/el2/base/files/tempXXX.dat");
510         break;
511     case PARAM_2:
512         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
513         break;
514     default:
515         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
516         break;
517     }
518     int mktfp = mkstemps(tpl, strlen(".dat"));
519     napi_value result = nullptr;
520     if (mktfp == PARAM_UNNORMAL) {
521         napi_create_int32(env, FAILD, &result);
522     } else {
523         napi_create_int32(env, RETURN_0, &result);
524     }
525     unlink(tpl);
526     return result;
527 }
528 
MkOSTemp(napi_env env, napi_callback_info info)529 static napi_value MkOSTemp(napi_env env, napi_callback_info info)
530 {
531     size_t argc = PARAM_2;
532     napi_value args[2] = {nullptr};
533     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
534     int flag = PARAM_0;
535     napi_get_value_int32(env, args[0], &flag);
536     char tpl[BUFSIZ];
537     switch (flag) {
538     case PARAM_0:
539         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX");
540         break;
541     case PARAM_1:
542         strcpy(tpl, "/data/storage/el2/base/files/tempXXX");
543         break;
544     case PARAM_2:
545         strcpy(tpl, "/data/storage/el2/base/files/temp");
546         break;
547     default:
548         strcpy(tpl, "/data/storage/el2/base/files/temp");
549         break;
550     }
551     int fileFlag = PARAM_0;
552     int mktfp = PARAM_0;
553     napi_get_value_int32(env, args[1], &fileFlag);
554     switch (fileFlag) {
555     case PARAM_0:
556         mktfp = mkostemp(tpl, O_APPEND);
557         break;
558     case PARAM_1:
559         mktfp = mkostemp(tpl, O_CLOEXEC);
560         break;
561     case PARAM_2:
562         mktfp = mkostemp(tpl, O_SYNC);
563         break;
564     default:
565         mktfp = mkostemp(tpl, O_SYNC);
566         break;
567     }
568     napi_value result = nullptr;
569     if (mktfp == PARAM_UNNORMAL) {
570         napi_create_int32(env, FAILD, &result);
571     } else {
572         napi_create_int32(env, RETURN_0, &result);
573     }
574     unlink(tpl);
575     return result;
576 }
577 
MkOSTempS(napi_env env, napi_callback_info info)578 static napi_value MkOSTempS(napi_env env, napi_callback_info info)
579 {
580     size_t argc = PARAM_2;
581     napi_value args[2] = {nullptr};
582     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
583     int flag = PARAM_0;
584     napi_get_value_int32(env, args[0], &flag);
585     char tpl[BUFSIZ];
586     switch (flag) {
587     case PARAM_0:
588         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX.dat");
589         break;
590     case PARAM_1:
591         strcpy(tpl, "/data/storage/el2/base/files/tempXXX.dat");
592         break;
593     case PARAM_2:
594         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
595         break;
596     default:
597         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
598         break;
599     }
600     int fileFlag = PARAM_0;
601     int mktfp = PARAM_0;
602     napi_get_value_int32(env, args[1], &fileFlag);
603     switch (fileFlag) {
604     case PARAM_0:
605         mktfp = mkostemps(tpl, strlen(".dat"), O_APPEND);
606         break;
607     case PARAM_1:
608         mktfp = mkostemps(tpl, strlen(".dat"), O_CLOEXEC);
609         break;
610     case PARAM_2:
611         mktfp = mkostemps(tpl, strlen(".dat"), O_SYNC);
612         break;
613     default:
614         mktfp = mkostemps(tpl, strlen(".dat"), O_SYNC);
615         break;
616     }
617     napi_value result = nullptr;
618     if (mktfp == PARAM_UNNORMAL) {
619         napi_create_int32(env, FAILD, &result);
620     } else {
621         napi_create_int32(env, RETURN_0, &result);
622     }
623     unlink(tpl);
624     return result;
625 }
626 
MkSTemp64(napi_env env, napi_callback_info info)627 static napi_value MkSTemp64(napi_env env, napi_callback_info info)
628 {
629     size_t argc = PARAM_1;
630     napi_value args[1] = {nullptr};
631     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
632     int flag = PARAM_0;
633     napi_get_value_int32(env, args[0], &flag);
634     char tpl[BUFSIZ];
635     switch (flag) {
636     case PARAM_0:
637         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX");
638         break;
639     case PARAM_1:
640         strcpy(tpl, "/data/storage/el2/base/files/tempXXX");
641         break;
642     case PARAM_2:
643         strcpy(tpl, "/data/storage/el2/base/files/temp");
644         break;
645     default:
646         strcpy(tpl, "/data/storage/el2/base/files/temp");
647         break;
648     }
649     int mktfp = mkstemp64(tpl);
650     napi_value result = nullptr;
651     if (mktfp == PARAM_UNNORMAL) {
652         napi_create_int32(env, FAILD, &result);
653     } else {
654         napi_create_int32(env, RETURN_0, &result);
655     }
656     unlink(tpl);
657     return result;
658 }
659 
MkSTempS64(napi_env env, napi_callback_info info)660 static napi_value MkSTempS64(napi_env env, napi_callback_info info)
661 {
662     size_t argc = PARAM_1;
663     napi_value args[1] = {nullptr};
664     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
665     int flag = PARAM_0;
666     napi_get_value_int32(env, args[0], &flag);
667     char tpl[BUFSIZ];
668     switch (flag) {
669     case PARAM_0:
670         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX.dat");
671         break;
672     case PARAM_1:
673         strcpy(tpl, "/data/storage/el2/base/files/tempXXX.dat");
674         break;
675     case PARAM_2:
676         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
677         break;
678     default:
679         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
680         break;
681     }
682     int mktfp = mkstemps64(tpl, strlen(".dat"));
683     napi_value result = nullptr;
684     if (mktfp == PARAM_UNNORMAL) {
685         napi_create_int32(env, FAILD, &result);
686     } else {
687         napi_create_int32(env, RETURN_0, &result);
688     }
689     unlink(tpl);
690     return result;
691 }
692 
MkOSTemp64(napi_env env, napi_callback_info info)693 static napi_value MkOSTemp64(napi_env env, napi_callback_info info)
694 {
695     size_t argc = PARAM_2;
696     napi_value args[2] = {nullptr};
697     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
698     int flag = PARAM_0;
699     napi_get_value_int32(env, args[0], &flag);
700     char tpl[BUFSIZ];
701     switch (flag) {
702     case PARAM_0:
703         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX");
704         break;
705     case PARAM_1:
706         strcpy(tpl, "/data/storage/el2/base/files/tempXXX");
707         break;
708     case PARAM_2:
709         strcpy(tpl, "/data/storage/el2/base/files/temp");
710         break;
711     default:
712         strcpy(tpl, "/data/storage/el2/base/files/temp");
713         break;
714     }
715     int fileFlag = PARAM_0;
716     int mktfp = PARAM_0;
717     napi_get_value_int32(env, args[1], &fileFlag);
718     switch (fileFlag) {
719     case PARAM_0:
720         mktfp = mkostemp64(tpl, O_APPEND);
721         break;
722     case PARAM_1:
723         mktfp = mkostemp64(tpl, O_CLOEXEC);
724         break;
725     case PARAM_2:
726         mktfp = mkostemp64(tpl, O_SYNC);
727         break;
728     default:
729         mktfp = mkostemp64(tpl, O_SYNC);
730         break;
731     }
732     napi_value result = nullptr;
733     if (mktfp == PARAM_UNNORMAL) {
734         napi_create_int32(env, FAILD, &result);
735     } else {
736         napi_create_int32(env, RETURN_0, &result);
737     }
738     unlink(tpl);
739     return result;
740 }
741 
MkOSTempS64(napi_env env, napi_callback_info info)742 static napi_value MkOSTempS64(napi_env env, napi_callback_info info)
743 {
744     size_t argc = PARAM_2;
745     napi_value args[2] = {nullptr};
746     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
747     int flag = PARAM_0;
748     napi_get_value_int32(env, args[0], &flag);
749     char tpl[BUFSIZ];
750     switch (flag) {
751     case PARAM_0:
752         strcpy(tpl, "/data/storage/el2/base/files/tempXXXXXX.dat");
753         break;
754     case PARAM_1:
755         strcpy(tpl, "/data/storage/el2/base/files/tempXXX.dat");
756         break;
757     case PARAM_2:
758         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
759         break;
760     default:
761         strcpy(tpl, "/data/storage/el2/base/files/temp.dat");
762         break;
763     }
764     int fileFlag = PARAM_0;
765     int mktfp = PARAM_0;
766     napi_get_value_int32(env, args[1], &fileFlag);
767     switch (fileFlag) {
768     case PARAM_0:
769         mktfp = mkostemps64(tpl, strlen(".dat"), O_APPEND);
770         break;
771     case PARAM_1:
772         mktfp = mkostemps64(tpl, strlen(".dat"), O_CLOEXEC);
773         break;
774     case PARAM_2:
775         mktfp = mkostemps64(tpl, strlen(".dat"), O_SYNC);
776         break;
777     default:
778         mktfp = mkostemps64(tpl, strlen(".dat"), O_SYNC);
779         break;
780     }
781     napi_value result = nullptr;
782     if (mktfp == PARAM_UNNORMAL) {
783         napi_create_int32(env, FAILD, &result);
784     } else {
785         napi_create_int32(env, RETURN_0, &result);
786     }
787     unlink(tpl);
788     return result;
789 }
790 
Getloadavg(napi_env env, napi_callback_info info)791 static napi_value Getloadavg(napi_env env, napi_callback_info info)
792 {
793     double loadavg[3];
794     int ret = getloadavg(loadavg, PARAM_3);
795     napi_value result = nullptr;
796     napi_create_int32(env, ret, &result);
797     return result;
798 }
Getsubopt(napi_env env, napi_callback_info info)799 static napi_value Getsubopt(napi_env env, napi_callback_info info)
800 {
801     char getsubopt1[] = "getsubopt";
802     char test[] = "test";
803 
804     char *tokens[] = {getsubopt1, test, nullptr};
805     char buf[BUF_SIZE];
806     strcpy(buf, "getsubopt=0100,unknown");
807     char *subopts = buf;
808     char *value = nullptr;
809     int ret = getsubopt(&subopts, tokens, &value);
810     napi_value result = nullptr;
811     if (ret != PARAM_UNNORMAL) {
812         napi_create_int32(env, RETURN_0, &result);
813     } else {
814         napi_create_int32(env, FAILD, &result);
815     }
816     return result;
817 }
Grantpt(napi_env env, napi_callback_info info)818 static napi_value Grantpt(napi_env env, napi_callback_info info)
819 {
820     int rev = grantpt(PARAM_0);
821     napi_value result = nullptr;
822     napi_create_int32(env, rev, &result);
823     return result;
824 }
MkDTemp(napi_env env, napi_callback_info info)825 static napi_value MkDTemp(napi_env env, napi_callback_info info)
826 {
827     char *ret = nullptr;
828     char path[] = "/data/storage/el2/base/files/mk-XXXXXX";
829     ret = mkdtemp(path);
830     if (access(path, F_OK) == PARAM_0) {
831         rmdir(path);
832     }
833     int res;
834     napi_value result = nullptr;
835     if (ret != nullptr) {
836         res = PARAM_0;
837     } else {
838         res = FAIL;
839     }
840     napi_create_int32(env, res, &result);
841     return result;
842 }
843 
Jrand48(napi_env env, napi_callback_info info)844 static napi_value Jrand48(napi_env env, napi_callback_info info)
845 {
846     size_t argc = PARAM_3;
847     napi_value args[3] = {nullptr};
848     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
849     uint32_t a;
850     uint32_t b;
851     uint32_t c;
852     napi_get_value_uint32(env, args[0], &a);
853     napi_get_value_uint32(env, args[1], &b);
854     napi_get_value_uint32(env, args[PARAM_2], &c);
855     uint16_t aa = a;
856     uint16_t ba = b;
857     uint16_t ca = c;
858     unsigned short sub[] = {aa, ba, ca};
859     long rev = jrand48(sub);
860     napi_value result = nullptr;
861     napi_create_int32(env, rev, &result);
862     return result;
863 }
InitState(napi_env env, napi_callback_info info)864 static napi_value InitState(napi_env env, napi_callback_info info)
865 {
866     char state[BUF_SIZE];
867     errno = ERRNO_0;
868     initstate(PARAM_1, state, sizeof state);
869     napi_value result = nullptr;
870     if (errno != ERRNO_0) {
871         napi_create_int32(env, FAILD, &result);
872     } else {
873         napi_create_int32(env, RETURN_0, &result);
874     }
875     return result;
876 }
877 
Lrand48(napi_env env, napi_callback_info info)878 static napi_value Lrand48(napi_env env, napi_callback_info info)
879 {
880     int ret = lrand48();
881     napi_value result = nullptr;
882     napi_create_int32(env, ret, &result);
883     return result;
884 }
885 
Mblen(napi_env env, napi_callback_info info)886 static napi_value Mblen(napi_env env, napi_callback_info info)
887 {
888     size_t ret = FAIL;
889 
890     char src[ARRY_MAX];
891 
892     wchar_t pwc[] = L"mblen_0100";
893     wcstombs(src, pwc, ARRY_MAX);
894     ret = mblen(src, ARRY_MAX);
895     napi_value result = nullptr;
896     napi_create_int32(env, ret, &result);
897     return result;
898 }
Compare(const void *a, const void *b)899 int Compare(const void *a, const void *b)
900 {
901     const int *x = static_cast<const int *>(a);
902     const int *y = static_cast<const int *>(b);
903 
904     if (*x > *y) {
905         return RETURN_1;
906     } else if (*x < *y) {
907         return FAILD;
908     }
909     return NO_ERR;
910 }
RealPath(napi_env env, napi_callback_info info)911 static napi_value RealPath(napi_env env, napi_callback_info info)
912 {
913     errno = ERRON_0;
914     char actualPath[PATH_MAX] = {0};
915     char *ptrRet = nullptr;
916     int fd = open("/data/storage/el2/base/files/Fzl.txt", O_CREAT, PARAM_0777);
917     close(fd);
918     ptrRet = realpath("/data/storage/el2/base/files/Fzl.txt", actualPath);
919     napi_value result = nullptr;
920     if (ptrRet != nullptr) {
921         napi_create_int32(env, RETURN_0, &result);
922     } else {
923         napi_create_int32(env, FAILD, &result);
924     }
925     return result;
926 }
927 
Qsort(napi_env env, napi_callback_info info)928 static napi_value Qsort(napi_env env, napi_callback_info info)
929 {
930     size_t argc = PARAM_1;
931     napi_value args[1] = {nullptr};
932     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
933     int value = PARAM_0;
934     napi_get_value_int32(env, args[0], &value);
935     const int num = PARAM_10;
936     int arr[num] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
937     qsort(arr, num, sizeof(int), Compare);
938     napi_value result = nullptr;
939     napi_create_int32(env, arr[value], &result);
940     return result;
941 }
942 
PtsName(napi_env env, napi_callback_info info)943 static napi_value PtsName(napi_env env, napi_callback_info info)
944 {
945     char *returnValue;
946     napi_value result = nullptr;
947     int fileDescribe = open("/data/storage/el2/base/files/fzl.txt", O_CREAT, PARAM_0777);
948     returnValue = ptsname(fileDescribe);
949     int backInfo = PARAM_0;
950     if (returnValue != nullptr) {
951         backInfo = RETURN_1;
952     }
953     close(fileDescribe);
954     napi_create_int32(env, backInfo, &result);
955     return result;
956 }
bye(void)957 void bye(void) {}
958 
Atexit(napi_env env, napi_callback_info info)959 static napi_value Atexit(napi_env env, napi_callback_info info)
960 {
961     int ret = atexit(bye);
962     napi_value result = nullptr;
963     napi_create_int32(env, ret, &result);
964     return result;
965 }
System(napi_env env, napi_callback_info info)966 static napi_value System(napi_env env, napi_callback_info info)
967 {
968     int system_result = system(nullptr);
969     napi_value result = nullptr;
970     napi_create_int32(env, system_result, &result);
971     return result;
972 }
973 
Unsetenv(napi_env env, napi_callback_info info)974 static napi_value Unsetenv(napi_env env, napi_callback_info info)
975 {
976     size_t argc = PARAM_1;
977     napi_value args[1] = {nullptr};
978     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
979     std::string valueFirst = NapiHelper::GetString(env, args[0]);
980     int unsetenvValue = DEF_VALUE;
981     if (strcmp(valueFirst.data(), "") == PARAM_0) {
982         unsetenvValue = unsetenv(valueFirst.data());
983     } else {
984         char env_temp[] = "test=putenv_0100";
985         int ret = putenv(env_temp);
986         std::string test = getenv("test");
987         if (strcmp(test.data(), "putenv_0100") == PARAM_0) {
988             ret = unsetenv("test");
989             if (ret == PARAM_0) {
990                 unsetenvValue = RETURN_1;
991             }
992         }
993     }
994     napi_value result = nullptr;
995     napi_create_int32(env, unsetenvValue, &result);
996     return result;
997 }
998 
PosixMemAlign(napi_env env, napi_callback_info info)999 static napi_value PosixMemAlign(napi_env env, napi_callback_info info)
1000 {
1001     errno = ERRON_0;
1002     void *memory = nullptr;
1003     int rev = posix_memalign(&memory, SIZE_16, RETURN_1);
1004     if (memory) {
1005         free(memory);
1006     }
1007     napi_value result = nullptr;
1008     napi_create_int32(env, rev, &result);
1009     return result;
1010 }
1011 
Exit(napi_env env, napi_callback_info info)1012 static napi_value Exit(napi_env env, napi_callback_info info)
1013 {
1014     int backParam = SUCCESS;
1015     napi_value result = nullptr;
1016     napi_create_int32(env, backParam, &result);
1017     int pid = fork();
1018     if (pid == PARAM_0) {
1019         exit(PARAM_0);
1020     }
1021     return result;
1022 }
1023 
Abs(napi_env env, napi_callback_info info)1024 static napi_value Abs(napi_env env, napi_callback_info info)
1025 {
1026     size_t argc = PARAM_1;
1027     napi_value args[1] = {nullptr};
1028     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1029     int backParam, firstParam;
1030     napi_get_value_int32(env, args[0], &firstParam);
1031     backParam = abs(firstParam);
1032     napi_value result = nullptr;
1033     napi_create_int32(env, backParam, &result);
1034     return result;
1035 }
1036 
DRand48(napi_env env, napi_callback_info info)1037 static napi_value DRand48(napi_env env, napi_callback_info info)
1038 {
1039     double backParam = drand48();
1040     napi_value result = nullptr;
1041     napi_create_double(env, backParam, &result);
1042     return result;
1043 }
1044 
ERand48(napi_env env, napi_callback_info info)1045 static napi_value ERand48(napi_env env, napi_callback_info info)
1046 {
1047     size_t argc = PARAM_3;
1048     napi_value args[3] = {nullptr, nullptr, nullptr};
1049     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1050     int firstTemp;
1051     napi_get_value_int32(env, args[0], &firstTemp);
1052     int secondTemp;
1053     napi_get_value_int32(env, args[1], &secondTemp);
1054     int thirdTemp;
1055     napi_get_value_int32(env, args[PARAM_2], &thirdTemp);
1056     unsigned short firstParam, secondParam, thirdParam;
1057     firstParam = firstTemp;
1058     secondParam = secondTemp;
1059     thirdParam = thirdTemp;
1060     unsigned short testNo[3] = {firstParam, secondParam, thirdParam};
1061     double backParam = erand48(testNo);
1062     napi_value result = nullptr;
1063     napi_create_double(env, backParam, &result);
1064     return result;
1065 }
1066 
Div(napi_env env, napi_callback_info info)1067 static napi_value Div(napi_env env, napi_callback_info info)
1068 {
1069     size_t argc = PARAM_2;
1070     napi_value args[2] = {nullptr, nullptr};
1071     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1072     int firstParam, secondParam;
1073     char backParam[64] = {"("}, strBuufer[64];
1074     napi_get_value_int32(env, args[0], &firstParam);
1075     napi_get_value_int32(env, args[1], &secondParam);
1076     div_t divResult;
1077     divResult = div(firstParam, secondParam);
1078     sprintf(strBuufer, "%d", divResult.quot);
1079     strcat(backParam, strBuufer);
1080     strcat(backParam, ",");
1081     sprintf(strBuufer, "%d", divResult.rem);
1082     strcat(backParam, strBuufer);
1083     strcat(backParam, ")");
1084     napi_value result = nullptr;
1085     napi_create_string_utf8(env, backParam, NAPI_AUTO_LENGTH, &result);
1086     return result;
1087 }
1088 
Atof(napi_env env, napi_callback_info info)1089 static napi_value Atof(napi_env env, napi_callback_info info)
1090 {
1091     size_t argc = PARAM_1;
1092     napi_value args[1] = {nullptr};
1093     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1094     char *param = NapiHelper::GetString(env, args[0]);
1095     napi_value result = nullptr;
1096 
1097     double resultValue = atof(param);
1098     napi_create_double(env, resultValue, &result);
1099 
1100     return result;
1101 }
1102 
Atoi(napi_env env, napi_callback_info info)1103 static napi_value Atoi(napi_env env, napi_callback_info info)
1104 {
1105     size_t argc = PARAM_1;
1106     napi_value args[1] = {nullptr};
1107     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1108     char *param = NapiHelper::GetString(env, args[0]);
1109     napi_value result = nullptr;
1110 
1111     double resultValue = atoi(param);
1112     napi_create_double(env, resultValue, &result);
1113 
1114     return result;
1115 }
1116 
Atol(napi_env env, napi_callback_info info)1117 static napi_value Atol(napi_env env, napi_callback_info info)
1118 {
1119     size_t argc = PARAM_1;
1120     napi_value args[1] = {nullptr};
1121     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1122     char *param = NapiHelper::GetString(env, args[0]);
1123     napi_value result = nullptr;
1124 
1125     double resultValue = atol(param);
1126     napi_create_double(env, resultValue, &result);
1127 
1128     return result;
1129 }
1130 
Atoll(napi_env env, napi_callback_info info)1131 static napi_value Atoll(napi_env env, napi_callback_info info)
1132 {
1133     size_t argc = PARAM_1;
1134     napi_value args[1] = {nullptr};
1135     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1136     char *param = NapiHelper::GetString(env, args[0]);
1137     napi_value result = nullptr;
1138 
1139     double resultValue = atoll(param);
1140     napi_create_double(env, resultValue, &result);
1141 
1142     return result;
1143 }
1144 
AlignedAlloc(napi_env env, napi_callback_info info)1145 static napi_value AlignedAlloc(napi_env env, napi_callback_info info)
1146 {
1147     size_t argc = PARAM_1;
1148     napi_value args[1] = {nullptr};
1149     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1150     int size;
1151     int resulTrue = SUCCESS;
1152     int resulFalse = EXPECTERROR;
1153     napi_get_value_int32(env, args[0], &size);
1154     napi_value result = nullptr;
1155 
1156     void *resultValue = aligned_alloc(alignof(void *), size);
1157     if (resultValue) {
1158         napi_create_int32(env, resulTrue, &result);
1159     } else {
1160         napi_create_int32(env, resulFalse, &result);
1161     }
1162 
1163     return result;
1164 }
1165 
Getenv(napi_env env, napi_callback_info info)1166 static napi_value Getenv(napi_env env, napi_callback_info info)
1167 {
1168     const char *env_var[1] = {"HOME"};
1169     char *env_val[1];
1170     int resultValue = EXPECTERROR;
1171     for (int i = PARAM_0; i < 1; i++) {
1172         env_val[i] = getenv(env_var[i]);
1173         if (env_val[i] != nullptr) {
1174             resultValue = SUCCESS;
1175         }
1176     }
1177     napi_value result = nullptr;
1178     napi_create_int32(env, resultValue, &result);
1179 
1180     return result;
1181 }
1182 
AtQuickExit(napi_env env, napi_callback_info info)1183 static napi_value AtQuickExit(napi_env env, napi_callback_info info)
1184 {
1185     int size;
1186     napi_value result = nullptr;
1187     size = at_quick_exit(bye);
1188     napi_create_int32(env, size, &result);
1189     return result;
1190 }
1191 
Calloc(napi_env env, napi_callback_info info)1192 static napi_value Calloc(napi_env env, napi_callback_info info)
1193 {
1194     size_t size = SIZE_10;
1195     size_t param = SIZE_20;
1196     napi_value result = nullptr;
1197     int resultValue = EXPECTERROR;
1198     if (calloc(size, param)) {
1199         resultValue = SUCCESS;
1200     }
1201     napi_create_int32(env, resultValue, &result);
1202     return result;
1203 }
1204 
Free(napi_env env, napi_callback_info info)1205 static napi_value Free(napi_env env, napi_callback_info info)
1206 {
1207     errno = ERRON_0;
1208     int *ptr;
1209     size_t size = SIZE_5;
1210     ptr = static_cast<int *>(malloc(size * sizeof(int)));
1211     free(ptr);
1212     napi_value result = nullptr;
1213     int resultValue = EXPECTERROR;
1214     if (errno == PARAM_0) {
1215         resultValue = SUCCESS;
1216     }
1217     napi_create_int32(env, resultValue, &result);
1218     return result;
1219 }
1220 
Bsearch(napi_env env, napi_callback_info info)1221 static napi_value Bsearch(napi_env env, napi_callback_info info)
1222 {
1223     const int num = SIZE_10;
1224     int arr[num] = {5, 9, 10, 14, 16, 19, 21, 26, 29, 31};
1225     int key1 = SIZE_10;
1226     int *p1 = static_cast<int *>(bsearch(&key1, arr, num, sizeof(int), Compare));
1227     int returnValue = EXPECTERROR;
1228     if (p1 != nullptr) {
1229         returnValue = SUCCESS;
1230     }
1231     napi_value result;
1232     napi_create_int32(env, returnValue, &result);
1233     return result;
1234 }
1235 
Clearenv(napi_env env, napi_callback_info info)1236 static napi_value Clearenv(napi_env env, napi_callback_info info)
1237 {
1238     int returnValue = clearenv();
1239     napi_value result;
1240     napi_create_int32(env, returnValue, &result);
1241     return result;
1242 }
1243 
SetState(napi_env env, napi_callback_info info)1244 static napi_value SetState(napi_env env, napi_callback_info info)
1245 {
1246     napi_value result = nullptr;
1247     char state[STAT_SIZE] = {0, 1, 2, 3, 4};
1248     char *stateInit = nullptr;
1249     char *stateSet = nullptr;
1250     stateInit = initstate(SEED, state, STAT_SIZE);
1251     stateSet = setstate(stateInit);
1252     if (nullptr != stateSet) {
1253         napi_create_int32(env, PARAM_0, &result);
1254     } else {
1255         napi_create_int32(env, FAILED, &result);
1256     }
1257     return result;
1258 }
1259 
1260 struct __locale_struct {
1261     double val;
1262 };
1263 
StrToFL(napi_env env, napi_callback_info info)1264 static napi_value StrToFL(napi_env env, napi_callback_info info)
1265 {
1266     napi_value result = nullptr;
1267     const char *nptr = "10";
1268     char *endptr = nullptr;
1269     struct __locale_struct loc = {0};
1270     double value = strtof_l(nptr, &endptr, &loc);
1271     if (value == TEST_NUM) {
1272         napi_create_int32(env, PARAM_0, &result);
1273     } else {
1274         napi_create_int32(env, FAILED, &result);
1275     }
1276     return result;
1277 }
1278 
StrToDL(napi_env env, napi_callback_info info)1279 static napi_value StrToDL(napi_env env, napi_callback_info info)
1280 {
1281     napi_value result = nullptr;
1282     const char *nptr = "10";
1283     char *endptr = nullptr;
1284     struct __locale_struct loc = {0};
1285     double value = strtod_l(nptr, &endptr, &loc);
1286     if (value == TEST_NUM) {
1287         napi_create_int32(env, PARAM_0, &result);
1288     } else {
1289         napi_create_int32(env, FAILED, &result);
1290     }
1291     return result;
1292 }
1293 
StrToLdL(napi_env env, napi_callback_info info)1294 static napi_value StrToLdL(napi_env env, napi_callback_info info)
1295 {
1296     napi_value result = nullptr;
1297     const char *nptr = "10";
1298     char *endptr = nullptr;
1299     struct __locale_struct loc = {0};
1300     long double value = strtold_l(nptr, &endptr, &loc);
1301     if (value == TEST_NUM) {
1302         napi_create_int32(env, PARAM_0, &result);
1303     } else {
1304         napi_create_int32(env, FAILED, &result);
1305     }
1306     return result;
1307 }
1308 
Realloc(napi_env env, napi_callback_info info)1309 static napi_value Realloc(napi_env env, napi_callback_info info)
1310 {
1311     napi_value result = nullptr;
1312     void *arr = malloc(LIB_BUFF_SIZE);
1313     void *ptr = realloc(arr, LIB_BUFF_SIZE + LIB_BUFF_SIZE);
1314     if (ptr != nullptr) {
1315         free(ptr);
1316         ptr = nullptr;
1317         napi_create_int32(env, PARAM_0, &result);
1318     } else {
1319         napi_create_int32(env, FAILED, &result);
1320     }
1321     return result;
1322 }
1323 
Valloc(napi_env env, napi_callback_info info)1324 static napi_value Valloc(napi_env env, napi_callback_info info)
1325 {
1326     napi_value result = nullptr;
1327     size_t len = LIB_BUFF_SIZE;
1328     void *memptr = valloc(len);
1329     if (memptr != nullptr) {
1330         napi_create_int32(env, PARAM_0, &result);
1331         free(memptr);
1332         memptr = nullptr;
1333     } else {
1334         napi_create_int32(env, FAILED, &result);
1335     }
1336     return result;
1337 }
1338 
1339 EXTERN_C_START
Init(napi_env env, napi_value exports)1340 static napi_value Init(napi_env env, napi_value exports)
1341 {
1342     napi_property_descriptor desc[] = {
1343         {"rand", nullptr, Rand, nullptr, nullptr, nullptr, napi_default, nullptr},
1344         {"randR", nullptr, RandR, nullptr, nullptr, nullptr, napi_default, nullptr},
1345         {"random", nullptr, Random, nullptr, nullptr, nullptr, napi_default, nullptr},
1346         {"seed48", nullptr, Seed48, nullptr, nullptr, nullptr, napi_default, nullptr},
1347         {"srand", nullptr, Srand, nullptr, nullptr, nullptr, napi_default, nullptr},
1348         {"srand48", nullptr, Srand48, nullptr, nullptr, nullptr, napi_default, nullptr},
1349         {"srandom", nullptr, Srandom, nullptr, nullptr, nullptr, napi_default, nullptr},
1350         {"strtod", nullptr, Strtod, nullptr, nullptr, nullptr, napi_default, nullptr},
1351         {"strtof", nullptr, Strtof, nullptr, nullptr, nullptr, napi_default, nullptr},
1352         {"strtol", nullptr, Strtol, nullptr, nullptr, nullptr, napi_default, nullptr},
1353         {"strtold", nullptr, Strtold, nullptr, nullptr, nullptr, napi_default, nullptr},
1354         {"strtoll", nullptr, Strtoll, nullptr, nullptr, nullptr, napi_default, nullptr},
1355         {"strtoul", nullptr, Strtoul, nullptr, nullptr, nullptr, napi_default, nullptr},
1356         {"strtoull", nullptr, Strtoull, nullptr, nullptr, nullptr, napi_default, nullptr},
1357         {"llabs", nullptr, LLabs, nullptr, nullptr, nullptr, napi_default, nullptr},
1358         {"labs", nullptr, Labs, nullptr, nullptr, nullptr, napi_default, nullptr},
1359         {"lcong48", nullptr, Lcong48, nullptr, nullptr, nullptr, napi_default, nullptr},
1360         {"ldiv", nullptr, Ldiv, nullptr, nullptr, nullptr, napi_default, nullptr},
1361         {"lldiv", nullptr, LLdiv, nullptr, nullptr, nullptr, napi_default, nullptr},
1362         {"mkTemp", nullptr, MkTemp, nullptr, nullptr, nullptr, napi_default, nullptr},
1363         {"mkSTemp", nullptr, MkSTemp, nullptr, nullptr, nullptr, napi_default, nullptr},
1364         {"mkOSTemp", nullptr, MkOSTemp, nullptr, nullptr, nullptr, napi_default, nullptr},
1365         {"mkSTempS", nullptr, MkSTempS, nullptr, nullptr, nullptr, napi_default, nullptr},
1366         {"mkOSTempS", nullptr, MkOSTempS, nullptr, nullptr, nullptr, napi_default, nullptr},
1367         {"mkSTemp64", nullptr, MkSTemp64, nullptr, nullptr, nullptr, napi_default, nullptr},
1368         {"mkOSTemp64", nullptr, MkOSTemp64, nullptr, nullptr, nullptr, napi_default, nullptr},
1369         {"mkSTempS64", nullptr, MkSTempS64, nullptr, nullptr, nullptr, napi_default, nullptr},
1370         {"mkOSTempS64", nullptr, MkOSTempS64, nullptr, nullptr, nullptr, napi_default, nullptr},
1371         {"getloadavg", nullptr, Getloadavg, nullptr, nullptr, nullptr, napi_default, nullptr},
1372         {"getsubopt", nullptr, Getsubopt, nullptr, nullptr, nullptr, napi_default, nullptr},
1373         {"grantpt", nullptr, Grantpt, nullptr, nullptr, nullptr, napi_default, nullptr},
1374         {"setenv", nullptr, Setenv, nullptr, nullptr, nullptr, napi_default, nullptr},
1375         {"getLoadAvg", nullptr, GetLoadAvg, nullptr, nullptr, nullptr, napi_default, nullptr},
1376         {"system", nullptr, System, nullptr, nullptr, nullptr, napi_default, nullptr},
1377         {"unsetenv", nullptr, Unsetenv, nullptr, nullptr, nullptr, napi_default, nullptr},
1378         {"erand48", nullptr, ERand48, nullptr, nullptr, nullptr, napi_default, nullptr},
1379         {"drand48", nullptr, DRand48, nullptr, nullptr, nullptr, napi_default, nullptr},
1380         {"exit", nullptr, Exit, nullptr, nullptr, nullptr, napi_default, nullptr},
1381         {"div", nullptr, Div, nullptr, nullptr, nullptr, napi_default, nullptr},
1382         {"abs", nullptr, Abs, nullptr, nullptr, nullptr, napi_default, nullptr},
1383         {"atof", nullptr, Atof, nullptr, nullptr, nullptr, napi_default, nullptr},
1384         {"atoi", nullptr, Atoi, nullptr, nullptr, nullptr, napi_default, nullptr},
1385         {"atol", nullptr, Atol, nullptr, nullptr, nullptr, napi_default, nullptr},
1386         {"atoll", nullptr, Atoll, nullptr, nullptr, nullptr, napi_default, nullptr},
1387         {"alignedAlloc", nullptr, AlignedAlloc, nullptr, nullptr, nullptr, napi_default, nullptr},
1388         {"atQuickExit", nullptr, AtQuickExit, nullptr, nullptr, nullptr, napi_default, nullptr},
1389         {"calloc", nullptr, Calloc, nullptr, nullptr, nullptr, napi_default, nullptr},
1390         {"getenv", nullptr, Getenv, nullptr, nullptr, nullptr, napi_default, nullptr},
1391         {"bsearch", nullptr, Bsearch, nullptr, nullptr, nullptr, napi_default, nullptr},
1392         {"clearenv", nullptr, Clearenv, nullptr, nullptr, nullptr, napi_default, nullptr},
1393         {"free", nullptr, Free, nullptr, nullptr, nullptr, napi_default, nullptr},
1394         {"mkDTemp", nullptr, MkDTemp, nullptr, nullptr, nullptr, napi_default, nullptr},
1395         {"mblen", nullptr, Mblen, nullptr, nullptr, nullptr, napi_default, nullptr},
1396         {"jrand48", nullptr, Jrand48, nullptr, nullptr, nullptr, napi_default, nullptr},
1397         {"initState", nullptr, InitState, nullptr, nullptr, nullptr, napi_default, nullptr},
1398         {"lrand48", nullptr, Lrand48, nullptr, nullptr, nullptr, napi_default, nullptr},
1399         {"realPath", nullptr, RealPath, nullptr, nullptr, nullptr, napi_default, nullptr},
1400         {"atexit", nullptr, Atexit, nullptr, nullptr, nullptr, napi_default, nullptr},
1401         {"qsort", nullptr, Qsort, nullptr, nullptr, nullptr, napi_default, nullptr},
1402         {"posixMemAlign", nullptr, PosixMemAlign, nullptr, nullptr, nullptr, napi_default, nullptr},
1403         {"ptsName", nullptr, PtsName, nullptr, nullptr, nullptr, napi_default, nullptr},
1404         {"setState", nullptr, SetState, nullptr, nullptr, nullptr, napi_default, nullptr},
1405         {"strToFL", nullptr, StrToFL, nullptr, nullptr, nullptr, napi_default, nullptr},
1406         {"strToDL", nullptr, StrToDL, nullptr, nullptr, nullptr, napi_default, nullptr},
1407         {"strToLdL", nullptr, StrToLdL, nullptr, nullptr, nullptr, napi_default, nullptr},
1408         {"valloc", nullptr, Valloc, nullptr, nullptr, nullptr, napi_default, nullptr},
1409         {"realloc", nullptr, Realloc, nullptr, nullptr, nullptr, napi_default, nullptr},
1410     };
1411     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1412     return exports;
1413 }
1414 
1415 EXTERN_C_END
1416 
1417 static napi_module demoModule = {
1418     .nm_version = 1,
1419     .nm_flags = 0,
1420     .nm_filename = nullptr,
1421     .nm_register_func = Init,
1422     .nm_modname = "stdlib",
1423     .nm_priv = ((void *)0),
1424     .reserved = {0},
1425 };
1426 
RegisterEntryModule(void)1427 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
1428