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, ");
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, ");
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], ¶m);
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], ¶m);
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