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 "napi/native_api.h"
18 #include <cstdarg>
19 #include <cstdio>
20 #include <cstdlib>
21 #include <cstring>
22 #include <fcntl.h>
23 #include <sys/inotify.h>
24 #include <utmp.h>
25 #include <uv.h>
26
27 #define SBUF_SIZE 128
28 #define ONEVAL 1
29 #define MINUSONE (-1)
30 #define SUCCESS 1
31 #define ERRON_0 0
32 #define SIZE_20 20
33 #define PARAM_1 1
34 #define PARAM_2 2
35 #define ZEROVAL 0
36 #define PATH "/data/storage/el2/base/files"
37 #define TEST_MODE 0666
38 #define SBUF_SIZE 128
39 #define ZEROVAL 0
40 #define ONEVAL 1
41 #define MINUSONE (-1)
42 #define SIXFOUR 64
43 #define ONEEIGHT 18
44 #define MAX_NAMBER 1024
45 #define HUNDRED 100
46 #define MAX_NUMBER 128
47 #define NO_ERR 0
48 #define SUCCESS 1
49 #define FAIL (-1)
50 #define ZERO 0
51 #define PARAM_0 0
52 #define PARAM_1 1
53 #define PARAM_5 5
54 #define PARAM_13 13
55 #define SIZE_64 64
56 #define PARAM_123 123
57 #define PARAM_321 321
58 #define HUNDRED 100
59 #define PATH "/data/storage/el2/base/files"
60 #define STRLENGTH 64
61 #define ONE 1
62 #define PARAM_2 2
63 #define PARAM_UNNORMAL (-1)
64 #define RETURN_0 0
65 #define SIZE_10 10
66 #define SIZE_20 20
67 #define SIZE_100 100
68 #define SIZE_1024 1024
69 #define SIZE_4096 4096
70 #define SIZE_8192 8192
71 #define ONESIX 16
72 #define DEF_VALUE (-2)
73 #define PARAM_10 10
74 #define LENGTH 256
75 #define RUTVAL 112
76 #define STR_VFSCANF_TXT "/data/storage/el2/base/files/Fzl.txt"
77
78 extern "C" int __vsprintf_chk(char *dest, int flags, size_t dst_len_from_compiler, const char *format, va_list va);
79
80 extern "C" size_t __fread_chk(void *, size_t, size_t, FILE *, size_t);
81 extern "C" char *__fgets_chk(char *, int, FILE *, size_t);
82 extern "C" ssize_t __pwrite_chk(int fd, const void *buf, size_t count, off_t offset, size_t buf_size);
83 extern "C" ssize_t __write_chk(int fd, const void *buf, size_t count, size_t buf_size);
84 extern "C" int __sprintf_chk(char *dest, int flags, size_t dst_len_from_compiler, const char *format, ...);
85 extern "C" int __snprintf_chk(char *dest, size_t supplied_size, int flags, size_t dst_len_from_compiler,
86 const char *format, ...);
87 extern "C" int __vsnprintf_chk(char *dest, size_t supplied_size, int flags, size_t dst_len_from_compiler,
88 const char *format, va_list va);
89
Setbuf(napi_env env,napi_callback_info info)90 static napi_value Setbuf(napi_env env, napi_callback_info info)
91 {
92 errno = ERRON_0;
93 FILE *f = fopen(STR_VFSCANF_TXT, "w+");
94 setbuf(f, nullptr);
95 fclose(f);
96 napi_value result = nullptr;
97 napi_create_int32(env, errno, &result);
98 return result;
99 }
100
Setbuffer(napi_env env,napi_callback_info info)101 static napi_value Setbuffer(napi_env env, napi_callback_info info)
102 {
103 errno = ERRON_0;
104 FILE *f = fopen(STR_VFSCANF_TXT, "w+");
105 setbuffer(f, nullptr, BUFSIZ);
106 fclose(f);
107 napi_value result = nullptr;
108 napi_create_int32(env, errno, &result);
109 return result;
110 }
111
Setlinebuf(napi_env env,napi_callback_info info)112 static napi_value Setlinebuf(napi_env env, napi_callback_info info)
113 {
114 errno = ERRON_0;
115 FILE *f = fopen(STR_VFSCANF_TXT, "w+");
116 setlinebuf(f);
117 fclose(f);
118 napi_value result = nullptr;
119 napi_create_int32(env, errno, &result);
120 return result;
121 }
122
VsprintfTest(char * format,...)123 int VsprintfTest(char *format, ...)
124 {
125 char buffer[SIZE_20] = {0};
126 va_list aptr;
127 va_start(aptr, format);
128 int vspval = vsprintf(buffer, format, aptr);
129 va_end(aptr);
130 return vspval;
131 }
Vsprintf(napi_env env,napi_callback_info info)132 static napi_value Vsprintf(napi_env env, napi_callback_info info)
133 {
134 int i = ONEVAL;
135 napi_value result = nullptr;
136 char format[SBUF_SIZE] = "%d";
137 int vspval = VsprintfTest(format, i);
138 if (vspval > ZEROVAL) {
139 napi_create_int32(env, ZEROVAL, &result);
140 } else {
141 napi_create_int32(env, MINUSONE, &result);
142 }
143 return result;
144 }
145
vsprintfChkTest(char * format,...)146 int vsprintfChkTest(char *format, ...)
147 {
148 char buffer[SIZE_20] = {0};
149 va_list aptr;
150 va_start(aptr, format);
151 int vspval = __vsprintf_chk(buffer, PARAM_1, PARAM_2, format, aptr);
152 va_end(aptr);
153 return vspval;
154 }
VsprintfChk(napi_env env,napi_callback_info info)155 static napi_value VsprintfChk(napi_env env, napi_callback_info info)
156 {
157 int i = ONEVAL;
158 napi_value result = nullptr;
159 char format[SBUF_SIZE] = "%d";
160 int vspval = vsprintfChkTest(format, i);
161 if (vspval > ZEROVAL) {
162 napi_create_int32(env, ZEROVAL, &result);
163 } else {
164 napi_create_int32(env, MINUSONE, &result);
165 }
166 return result;
167 }
Feof(napi_env env,napi_callback_info info)168 static napi_value Feof(napi_env env, napi_callback_info info)
169 {
170 char path[SBUF_SIZE] = "/data/storage/el2/base/files/Fzl.txt";
171 int fileDescribe = SUCCESS;
172 FILE *stream = fopen(path, "r");
173 napi_value result = nullptr;
174 fileDescribe = feof(stream);
175 napi_create_int32(env, fileDescribe, &result);
176 return result;
177 }
178
Tmpnam(napi_env env,napi_callback_info info)179 static napi_value Tmpnam(napi_env env, napi_callback_info info)
180 {
181 char buffer[L_tmpnam];
182 char *p = tmpnam(buffer);
183 napi_value result = nullptr;
184 napi_create_string_utf8(env, p, NAPI_AUTO_LENGTH, &result);
185 return result;
186 }
187
Tmpfile(napi_env env,napi_callback_info info)188 static napi_value Tmpfile(napi_env env, napi_callback_info info)
189 {
190 FILE *f = tmpfile();
191 int file_value = ZERO;
192 if (f == nullptr) {
193 file_value = FAIL;
194 }
195 napi_value result = nullptr;
196 napi_create_int32(env, file_value, &result);
197 return result;
198 }
199
Tmpfile64(napi_env env,napi_callback_info info)200 static napi_value Tmpfile64(napi_env env, napi_callback_info info)
201 {
202 FILE *f = tmpfile64();
203 int file_value = ZERO;
204 if (f == nullptr) {
205 file_value = FAIL;
206 }
207 napi_value result = nullptr;
208 napi_create_int32(env, file_value, &result);
209 return result;
210 }
211
vsnprintfChk_test(char * str,size_t n,char * fmt,const char * funcName,...)212 int vsnprintfChk_test(char *str, size_t n, char *fmt, const char *funcName, ...)
213 {
214 char s[n];
215 va_list ap;
216 va_start(ap, funcName);
217 size_t bos = __DIAGNOSE_BOS(fmt);
218 int vsnval = __vsnprintf_chk(s, n, ZEROVAL, bos, fmt, ap);
219 va_end(ap);
220 return vsnval;
221 }
222
VsnprintfChk(napi_env env,napi_callback_info info)223 static napi_value VsnprintfChk(napi_env env, napi_callback_info info)
224 {
225 char value[MAX_NUMBER] = "value is use";
226 char value1[MAX_NUMBER] = "value is %s";
227 int vsnval = vsnprintfChk_test(value, PARAM_13, value1, "vsnprintfChk_test", "use");
228 napi_value result = nullptr;
229 if (vsnval < ZEROVAL) {
230 napi_create_int32(env, MINUSONE, &result);
231 } else {
232 napi_create_int32(env, ZEROVAL, &result);
233 }
234 return result;
235 }
236
SnprintfChk(napi_env env,napi_callback_info info)237 static napi_value SnprintfChk(napi_env env, napi_callback_info info)
238 {
239 size_t argc = PARAM_1;
240 napi_value args[1] = {nullptr};
241 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
242 int isSuccessCase;
243 napi_get_value_int32(env, args[0], &isSuccessCase);
244 char buffer[SIZE_20];
245 int snprintf_value = DEF_VALUE;
246 int toJs = DEF_VALUE;
247 if (isSuccessCase == PARAM_1) {
248 snprintf_value = __snprintf_chk(buffer, SIZE_20, PARAM_0, SIZE_20, "hello : %s", "world!");
249 if (snprintf_value > PARAM_0) {
250 toJs = PARAM_1;
251 }
252 }
253 napi_value result = nullptr;
254 napi_create_int32(env, toJs, &result);
255 return result;
256 }
257
SprintfChk(napi_env env,napi_callback_info info)258 static napi_value SprintfChk(napi_env env, napi_callback_info info)
259 {
260 size_t argc = PARAM_1;
261 napi_value args[1] = {nullptr};
262 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
263 int isSuccessCase;
264 napi_get_value_int32(env, args[0], &isSuccessCase);
265 char buffer[SIZE_20];
266 int sprintfValue = DEF_VALUE;
267 int toJs = DEF_VALUE;
268 if (isSuccessCase == PARAM_1) {
269 sprintfValue = __sprintf_chk(buffer, PARAM_0, SIZE_20, "hello : %s", "world!");
270 if (sprintfValue > PARAM_0) {
271 toJs = SUCCESS;
272 }
273 }
274 napi_value result = nullptr;
275 napi_create_int32(env, toJs, &result);
276 return result;
277 }
278
WriteChk(napi_env env,napi_callback_info info)279 static napi_value WriteChk(napi_env env, napi_callback_info info)
280 {
281 size_t argc = PARAM_2;
282 napi_value args[2] = {nullptr};
283 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
284
285 size_t length = SIZE_64, stresult = PARAM_0;
286 char *strTemp = static_cast<char *>(malloc(sizeof(char) * length));
287 napi_get_value_string_utf8(env, args[0], strTemp, length, &stresult);
288 char *valueSecond = NapiHelper::GetString(env, args[1]);
289
290 int fp = open(strTemp, O_WRONLY | O_CREAT);
291 ssize_t valueResult = __write_chk(fp, valueSecond, strlen(valueSecond), strlen(valueSecond) + PARAM_1);
292 int toJs = DEF_VALUE;
293 if (valueResult != FAIL) {
294 toJs = SUCCESS;
295 }
296
297 napi_value result = nullptr;
298 napi_create_int32(env, toJs, &result);
299 return result;
300 }
301
PwriteChk(napi_env env,napi_callback_info info)302 static napi_value PwriteChk(napi_env env, napi_callback_info info)
303 {
304 size_t argc = PARAM_2;
305 napi_value args[2] = {nullptr};
306 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
307
308 size_t length = SIZE_64, stresult = PARAM_0;
309 char *strTemp = static_cast<char *>(malloc(sizeof(char) * length));
310 napi_get_value_string_utf8(env, args[0], strTemp, length, &stresult);
311 char *valueSecond = NapiHelper::GetString(env, args[1]);
312
313 int fp = open(strTemp, O_WRONLY | O_CREAT);
314 ssize_t valueResult = __pwrite_chk(fp, valueSecond, strlen(valueSecond), PARAM_5, strlen(valueSecond) + PARAM_1);
315 int toJs = DEF_VALUE;
316 if (valueResult != FAIL) {
317 toJs = SUCCESS;
318 }
319
320 napi_value result = nullptr;
321 napi_create_int32(env, toJs, &result);
322 return result;
323 }
324
FgetsChk(napi_env env,napi_callback_info info)325 static napi_value FgetsChk(napi_env env, napi_callback_info info)
326 {
327 char helloWorld[] = "hello world!";
328 FILE *fp = fmemopen(helloWorld, sizeof(helloWorld), "r");
329 const int bufferSize = ONESIX;
330 char buf[bufferSize];
331 char *char_value;
332 char_value = __fgets_chk(buf, sizeof(buf), fp, ONESIX);
333 napi_value result = nullptr;
334 napi_create_string_utf8(env, char_value, NAPI_AUTO_LENGTH, &result);
335 return result;
336 }
337
Fread_chk(napi_env env,napi_callback_info info)338 static napi_value Fread_chk(napi_env env, napi_callback_info info)
339 {
340 size_t bos = ZERO;
341 FILE *file;
342 char buffer[20];
343 file = fopen(PATH, "r");
344 int ret = __fread_chk(buffer, bos, bos, file, bos);
345 napi_value result = nullptr;
346 napi_create_int32(env, ret, &result);
347 return result;
348 }
349
vasprintf_0100(char * v,...)350 int vasprintf_0100(char *v, ...)
351 {
352 va_list ap;
353 va_start(ap, v);
354 char ta[] = " ";
355 char *temp = ta;
356 int result = vasprintf(&temp, v, ap);
357 if (result < PARAM_0 || strcmp(temp, "value is 123 and 321.") != PARAM_0) {
358 result = FAIL;
359 }
360 va_end(ap);
361 return result;
362 }
363
Vasprintf(napi_env env,napi_callback_info info)364 static napi_value Vasprintf(napi_env env, napi_callback_info info)
365 {
366 size_t argc = PARAM_1;
367 napi_value args[1] = {nullptr};
368 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
369
370 int caseNumber;
371 int toJs = FAIL;
372 napi_get_value_int32(env, args[0], &caseNumber);
373 if (caseNumber == PARAM_1) {
374 char cb[] = "value is %d and %d.";
375 int value = vasprintf_0100(cb, PARAM_123, PARAM_321);
376 if (value != FAIL) {
377 toJs = SUCCESS;
378 }
379 }
380 napi_value result = nullptr;
381 napi_create_int32(env, toJs, &result);
382 return result;
383 }
384
Ungetc(napi_env env,napi_callback_info info)385 static napi_value Ungetc(napi_env env, napi_callback_info info)
386 {
387 size_t argc = PARAM_1;
388 napi_value args[1] = {nullptr};
389 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
390
391 int valueFirst = getchar();
392 napi_get_value_int32(env, args[0], &valueFirst);
393 FILE *fp = fopen("/data/storage/el2/base/files/FZL.txt", "r");
394 valueFirst = getc(fp);
395 int ungetcValue = ungetc(valueFirst, fp);
396 napi_value result = nullptr;
397 napi_create_int32(env, ungetcValue, &result);
398 return result;
399 }
400
Putw(napi_env env,napi_callback_info info)401 static napi_value Putw(napi_env env, napi_callback_info info)
402 {
403 size_t argc = PARAM_1;
404 napi_value args[1] = {nullptr};
405 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
406 int valueFirst;
407 napi_get_value_int32(env, args[0], &valueFirst);
408 FILE *fp;
409 napi_value result = nullptr;
410 char file[LENGTH] = "/data/storage/el2/base/files/testPutw.txt";
411 fp = fopen(file, "w+");
412 if (valueFirst == ZEROVAL) {
413 int putval = putw(PARAM_10, fp);
414 napi_create_int32(env, putval, &result);
415 } else {
416 int putval = putw(PARAM_10, stdin);
417 napi_create_int32(env, putval, &result);
418 }
419 fclose(fp);
420 return result;
421 }
422
Rename(napi_env env,napi_callback_info info)423 static napi_value Rename(napi_env env, napi_callback_info info)
424 {
425 char oldName[] = "/data/storage/el2/base/files/testRenameOld.txt";
426 char newName[] = "/data/storage/el2/base/files/testRenameNew.txt";
427 int resultValue = rename(oldName, newName);
428 napi_value result = nullptr;
429
430 napi_create_int32(env, resultValue, &result);
431 return result;
432 }
vfsf(FILE * file,char * fmt,...)433 int vfsf(FILE *file, char *fmt, ...)
434 {
435 va_list argp;
436 int value;
437 va_start(argp, fmt);
438 value = vfscanf(file, fmt, argp);
439 va_end(argp);
440 return value;
441 }
442 #define TFVAL 24
443 #define FFVAL 40.0
Vfscanf(napi_env env,napi_callback_info info)444 static napi_value Vfscanf(napi_env env, napi_callback_info info)
445 {
446 errno = ZEROVAL;
447 FILE *file;
448 int i = TFVAL;
449 float fl = FFVAL;
450 char str[4] = "boy";
451 file = fopen("/data/storage/el2/base/files/Fzl.txt", "w+");
452 char value[MAX_NUMBER] = "%d%f%s";
453 int ret = vfsf(file, value, i, fl, str);
454 rewind(file);
455 fscanf(file, "%d%f%s", &i, &fl, str);
456 fclose(file);
457 if (errno == NO_ERR) {
458 ret = SUCCESS;
459 }
460 napi_value result;
461 napi_create_int32(env, ret, &result);
462 return result;
463 }
Remove(napi_env env,napi_callback_info info)464 static napi_value Remove(napi_env env, napi_callback_info info)
465 {
466 char path[] = "/data/storage/el2/base/files/testRemove.txt";
467 int resultValue = remove(path);
468 napi_value result = nullptr;
469
470 napi_create_int32(env, resultValue, &result);
471 return result;
472 }
473
vfprintftest(char * file_name,char * format,char * funcName,char * want_reuslt,...)474 int vfprintftest(char *file_name, char *format, char *funcName, char *want_reuslt, ...)
475 {
476 FILE *file = fopen(file_name, "w");
477 va_list ap;
478 va_start(ap, want_reuslt);
479 int vfpval = vfprintf(file, format, ap);
480 va_end(ap);
481 fclose(file);
482 return vfpval;
483 }
484
Vfprintf(napi_env env,napi_callback_info info)485 static napi_value Vfprintf(napi_env env, napi_callback_info info)
486 {
487 char value1[MAX_NUMBER] = "/data/storage/el2/base/files/test.txt";
488 char value2[MAX_NUMBER] = "value is %s and %d";
489 char value3[MAX_NUMBER] = "vfprintf_0100";
490 char value4[MAX_NUMBER] = "value is qwe and 1";
491
492 int vfpval = vfprintftest(value1, value2, value3, value4, "qwe", "1");
493 napi_value result;
494 if (vfpval < ZEROVAL) {
495 napi_create_int32(env, MINUSONE, &result);
496 } else {
497 napi_create_int32(env, ZEROVAL, &result);
498 }
499 return result;
500 }
501
vprintf()502 int vprintf()
503 {
504 va_list ap;
505 return vfprintf(stdout, "/data/storage/el2/base/files/test.txt", ap);
506 }
507
VprintfTestt(char * format,...)508 int VprintfTestt(char *format, ...)
509 {
510 va_list args;
511 va_start(args, format);
512 int vprval = vprintf(format, args);
513 va_end(args);
514 return vprval;
515 }
516
Vprintf(napi_env env,napi_callback_info info)517 static napi_value Vprintf(napi_env env, napi_callback_info info)
518 {
519 char value[MAX_NUMBER] = "value is %s and %d";
520 int vprval = VprintfTestt(value);
521 napi_value result;
522 if (vprval < ZEROVAL) {
523 napi_create_int32(env, MINUSONE, &result);
524 } else {
525 napi_create_int32(env, ZEROVAL, &result);
526 }
527 return result;
528 }
529
vsnprintf_test(char * str,size_t n,char * fmt,const char * funcName,...)530 int vsnprintf_test(char *str, size_t n, char *fmt, const char *funcName, ...)
531 {
532 char s[n];
533 va_list ap;
534 va_start(ap, funcName);
535 int vsnval = vsnprintf(s, n, fmt, ap);
536 va_end(ap);
537 return vsnval;
538 }
539
Vsnprintf(napi_env env,napi_callback_info info)540 static napi_value Vsnprintf(napi_env env, napi_callback_info info)
541 {
542 char value1[MAX_NUMBER] = "value is use";
543 char value2[MAX_NUMBER] = "value is %s";
544
545 int vsnval = vsnprintf_test(value1, 13, value2, "vsnprintf_test", "use");
546 napi_value result = nullptr;
547 if (vsnval < ZEROVAL) {
548 napi_create_int32(env, MINUSONE, &result);
549 } else {
550 napi_create_int32(env, ZEROVAL, &result);
551 }
552 return result;
553 }
554
GetMatches(const char * str,const char * format,...)555 int GetMatches(const char *str, const char *format, ...)
556 {
557 va_list args;
558 va_start(args, format);
559 int vssval = vsscanf(str, format, args);
560 va_end(args);
561 return vssval;
562 }
563
Vsscanf(napi_env env,napi_callback_info info)564 static napi_value Vsscanf(napi_env env, napi_callback_info info)
565 {
566 int val = ZEROVAL;
567 char buf[HUNDRED];
568 int vssval = GetMatches("99 bottles of beer on the wall", " %d %s ", &val, buf);
569 napi_value result;
570 if (vssval < ZEROVAL) {
571 napi_create_int32(env, MINUSONE, &result);
572 } else {
573 napi_create_int32(env, ZEROVAL, &result);
574 }
575 return result;
576 }
577
Tempnam(napi_env env,napi_callback_info info)578 static napi_value Tempnam(napi_env env, napi_callback_info info)
579 {
580 char dir[] = PATH;
581 char pte[] = "temp";
582 char *temp = tempnam(dir, pte);
583 napi_value result = nullptr;
584 napi_create_string_utf8(env, temp, NAPI_AUTO_LENGTH, &result);
585 return result;
586 }
587
Sscanf(napi_env env,napi_callback_info info)588 static napi_value Sscanf(napi_env env, napi_callback_info info)
589 {
590 const char *fmt = "temp";
591 char s[] = "temp";
592 int snprintf_value = sscanf(s, fmt, fmt);
593 napi_value result = nullptr;
594 napi_create_int32(env, snprintf_value, &result);
595 return result;
596 }
597
Snprintf(napi_env env,napi_callback_info info)598 static napi_value Snprintf(napi_env env, napi_callback_info info)
599 {
600 char buffer[20];
601 const char *format = "AB";
602 int snprintf_value = snprintf(buffer, ZERO, format, format);
603 napi_value result = nullptr;
604 napi_create_int32(env, snprintf_value, &result);
605 return result;
606 }
607
Setvbuf(napi_env env,napi_callback_info info)608 static napi_value Setvbuf(napi_env env, napi_callback_info info)
609 {
610 char buf[MAX_NAMBER] = {0};
611 char path[PATH_MAX] = {0};
612 FILE *fptr = fopen("/data/storage/el2/base/files/FZL.txt", "w+");
613 int setval = setvbuf(fptr, buf, _IOFBF, MAX_NAMBER);
614 napi_value result = nullptr;
615 napi_create_int32(env, setval, &result);
616 fclose(fptr);
617 remove(path);
618 return result;
619 }
620
PutCUnlocked(napi_env env,napi_callback_info info)621 static napi_value PutCUnlocked(napi_env env, napi_callback_info info)
622 {
623 const int32_t PUTC_RET = RUTVAL;
624 int ret = FAIL;
625 FILE *file = fopen("/data/storage/el2/base/files/fzl.txt", "w");
626 if (putc_unlocked('p', file) != PUTC_RET) {
627 ret = FAIL;
628 } else {
629 ret = SUCCESS;
630 }
631 napi_value result = nullptr;
632 napi_create_int32(env, ret, &result);
633 return result;
634 }
635
Putc(napi_env env,napi_callback_info info)636 static napi_value Putc(napi_env env, napi_callback_info info)
637 {
638 const int32_t PUTC_RET = RUTVAL;
639 int ret = FAIL;
640 FILE *file = fopen("/data/storage/el2/base/files/fzl.txt", "w");
641 if (putc('p', file) != PUTC_RET) {
642 ret = FAIL;
643 } else {
644 ret = SUCCESS;
645 }
646 napi_value result = nullptr;
647 napi_create_int32(env, ret, &result);
648 return result;
649 }
650
651 EXTERN_C_START
Init(napi_env env,napi_value exports)652 static napi_value Init(napi_env env, napi_value exports)
653 {
654 napi_property_descriptor desc[] = {
655 {"setbuf", nullptr, Setbuf, nullptr, nullptr, nullptr, napi_default, nullptr},
656 {"setbuffer", nullptr, Setbuffer, nullptr, nullptr, nullptr, napi_default, nullptr},
657 {"setlinebuf", nullptr, Setlinebuf, nullptr, nullptr, nullptr, napi_default, nullptr},
658 {"vsprintf", nullptr, Vsprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
659 {"vsprintfChk", nullptr, VsprintfChk, nullptr, nullptr, nullptr, napi_default, nullptr},
660 {"feof", nullptr, Feof, nullptr, nullptr, nullptr, napi_default, nullptr},
661 {"putc", nullptr, Putc, nullptr, nullptr, nullptr, napi_default, nullptr},
662 {"putCUnlocked", nullptr, PutCUnlocked, nullptr, nullptr, nullptr, napi_default, nullptr},
663 {"setvbuf", nullptr, Setvbuf, nullptr, nullptr, nullptr, napi_default, nullptr},
664 {"snprintf", nullptr, Snprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
665 {"sscanf", nullptr, Sscanf, nullptr, nullptr, nullptr, napi_default, nullptr},
666 {"tempnam", nullptr, Tempnam, nullptr, nullptr, nullptr, napi_default, nullptr},
667 {"vsscanf", nullptr, Vsscanf, nullptr, nullptr, nullptr, napi_default, nullptr},
668 {"vsnprintf", nullptr, Vsnprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
669 {"vprintf", nullptr, Vprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
670 {"vfprintf", nullptr, Vfprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
671 {"vfscanf", nullptr, Vfscanf, nullptr, nullptr, nullptr, napi_default, nullptr},
672 {"remove", nullptr, Remove, nullptr, nullptr, nullptr, napi_default, nullptr},
673 {"rename", nullptr, Rename, nullptr, nullptr, nullptr, napi_default, nullptr},
674 {"putw", nullptr, Putw, nullptr, nullptr, nullptr, napi_default, nullptr},
675 {"ungetc", nullptr, Ungetc, nullptr, nullptr, nullptr, napi_default, nullptr},
676 {"vasprintf", nullptr, Vasprintf, nullptr, nullptr, nullptr, napi_default, nullptr},
677 {"freadChk", nullptr, Fread_chk, nullptr, nullptr, nullptr, napi_default, nullptr},
678 {"fgetsChk", nullptr, FgetsChk, nullptr, nullptr, nullptr, napi_default, nullptr},
679 {"pwriteChk", nullptr, PwriteChk, nullptr, nullptr, nullptr, napi_default, nullptr},
680 {"writeChk", nullptr, WriteChk, nullptr, nullptr, nullptr, napi_default, nullptr},
681 {"sprintfChk", nullptr, SprintfChk, nullptr, nullptr, nullptr, napi_default, nullptr},
682 {"snprintfChk", nullptr, SnprintfChk, nullptr, nullptr, nullptr, napi_default, nullptr},
683 {"vsnprintfChk", nullptr, VsnprintfChk, nullptr, nullptr, nullptr, napi_default, nullptr},
684 {"tmpfile", nullptr, Tmpfile, nullptr, nullptr, nullptr, napi_default, nullptr},
685 {"tmpfile64", nullptr, Tmpfile64, nullptr, nullptr, nullptr, napi_default, nullptr},
686 {"tmpnam", nullptr, Tmpnam, nullptr, nullptr, nullptr, napi_default, nullptr},
687 };
688 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
689 return exports;
690 }
691
692 EXTERN_C_END
693
694 static napi_module demoModule = {
695 .nm_version = 1,
696 .nm_flags = 0,
697 .nm_filename = nullptr,
698 .nm_register_func = Init,
699 .nm_modname = "stdio",
700 .nm_priv = ((void *)0),
701 .reserved = {0},
702 };
703
RegisterEntryModule(void)704 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
705