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 thisw 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 * diswtributed under the License isw diswtributed 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 permiswsions and
13 * limitations under the License.
14 */
15
16 #include <cwchar>
17 #include <cwctype>
18 #include <js_native_api.h>
19 #include <malloc.h>
20 #include <node_api.h>
21 #include <sys/select.h>
22
23 #define STRLENGTH 16
24 #define FAIL (-1)
25 #define NO_ERR 0
26 #define SUCCESS 1
27 #define FALSE 0
28 #define PARAM_0 0
29 #define PARAM_1 1
30 #define PARAM_2 2
31 #define PARAM_UNNORMAL (-1)
32 #define RETURN_0 0
33 #define RETURN_ONE 1
34 #define FAILD (-1)
35 #define ERRON_0 0
36 #define SIZE_3 3
37 #define SIZE_5 5
38 #define SIZE_6 6
39 #define SIZE_10 10
40 #define SIZE_13 13
41 #define SIZE_18 18
42 #define SIZE_20 20
43 #define SIZE_25 25
44 #define SIZE_30 30
45 #define SIZE_80 80
46 #define SIZE_100 100
47 #define SIZE_256 256
48 #define SIZE_1024 1024
49 #define SIZE_4096 4096
50 #define SIZE_8192 8192
51
Iswalnum(napi_env env,napi_callback_info info)52 static napi_value Iswalnum(napi_env env, napi_callback_info info)
53 {
54 size_t argc = PARAM_1;
55 napi_value args[1] = {nullptr};
56 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
57 size_t length = STRLENGTH;
58 size_t strResult = NO_ERR;
59 char ch[length];
60 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
61 int retVal = iswalnum((wint_t) * (char16_t *)ch);
62 napi_value result;
63 if (retVal != NO_ERR) {
64 napi_create_int32(env, SUCCESS, &result);
65 return result;
66 } else {
67 napi_create_int32(env, FALSE, &result);
68 return result;
69 }
70 }
71
IswalnumL(napi_env env,napi_callback_info info)72 static napi_value IswalnumL(napi_env env, napi_callback_info info)
73 {
74 size_t argc = PARAM_1;
75 napi_value args[1] = {nullptr};
76 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
77 size_t length = STRLENGTH;
78 size_t strResult = NO_ERR;
79 char ch[length];
80 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
81 int retVal = iswalnum_l((wint_t) * (char16_t *)ch, PARAM_0);
82 napi_value result;
83 if (retVal != PARAM_0) {
84 napi_create_int32(env, SUCCESS, &result);
85 return result;
86 } else {
87 napi_create_int32(env, FALSE, &result);
88 return result;
89 }
90 }
91
Iswalpha(napi_env env,napi_callback_info info)92 static napi_value Iswalpha(napi_env env, napi_callback_info info)
93 {
94 size_t argc = PARAM_1;
95 napi_value args[1] = {nullptr};
96 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
97 size_t length = STRLENGTH;
98 size_t strResult = NO_ERR;
99 char ch[length];
100 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
101 int retVal = iswalpha((wint_t) * (char16_t *)ch);
102 napi_value result;
103 if (retVal != PARAM_0) {
104 napi_create_int32(env, SUCCESS, &result);
105 return result;
106 } else {
107 napi_create_int32(env, FALSE, &result);
108 return result;
109 }
110 }
111
IswalphaL(napi_env env,napi_callback_info info)112 static napi_value IswalphaL(napi_env env, napi_callback_info info)
113 {
114 size_t argc = PARAM_1;
115 napi_value args[1] = {nullptr};
116 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
117 size_t length = STRLENGTH;
118 size_t strResult = NO_ERR;
119 char ch[length];
120 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
121 int retVal = iswalpha_l((wint_t) * (char16_t *)ch, PARAM_0);
122 napi_value result;
123 if (retVal != PARAM_0) {
124 napi_create_int32(env, SUCCESS, &result);
125 return result;
126 } else {
127 napi_create_int32(env, FALSE, &result);
128 return result;
129 }
130 }
131
Iswblank(napi_env env,napi_callback_info info)132 static napi_value Iswblank(napi_env env, napi_callback_info info)
133 {
134 size_t argc = PARAM_1;
135 napi_value args[1] = {nullptr};
136 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
137 size_t length = STRLENGTH;
138 size_t strResult = NO_ERR;
139 char ch[length];
140 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
141 int retVal = iswblank((wint_t) * (char16_t *)ch);
142 napi_value result;
143 if (retVal != PARAM_0) {
144 napi_create_int32(env, SUCCESS, &result);
145 return result;
146 } else {
147 napi_create_int32(env, FALSE, &result);
148 return result;
149 }
150 }
151
IswblankL(napi_env env,napi_callback_info info)152 static napi_value IswblankL(napi_env env, napi_callback_info info)
153 {
154 size_t argc = PARAM_1;
155 napi_value args[1] = {nullptr};
156 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
157 size_t length = STRLENGTH;
158 size_t strResult = NO_ERR;
159 char ch[length];
160 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
161 int retVal = iswblank_l((wint_t) * (char16_t *)ch, PARAM_0);
162 napi_value result;
163 if (retVal != PARAM_0) {
164 napi_create_int32(env, SUCCESS, &result);
165 return result;
166 } else {
167 napi_create_int32(env, FALSE, &result);
168 return result;
169 }
170 }
171
Iswcntrl(napi_env env,napi_callback_info info)172 static napi_value Iswcntrl(napi_env env, napi_callback_info info)
173 {
174 size_t argc = PARAM_1;
175 napi_value args[1] = {nullptr};
176 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
177 int first;
178 napi_get_value_int32(env, args[0], &first);
179 int retVal = iswcntrl(first);
180 napi_value result;
181 if (retVal != PARAM_0) {
182 napi_create_int32(env, SUCCESS, &result);
183 return result;
184 } else {
185 napi_create_int32(env, FALSE, &result);
186 return result;
187 }
188 }
189
IswcntrlL(napi_env env,napi_callback_info info)190 static napi_value IswcntrlL(napi_env env, napi_callback_info info)
191 {
192 size_t argc = PARAM_1;
193 napi_value args[1] = {nullptr};
194 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
195 int first;
196 napi_get_value_int32(env, args[0], &first);
197 int retVal = iswcntrl_l(first, PARAM_0);
198 napi_value result;
199 if (retVal != PARAM_0) {
200 napi_create_int32(env, SUCCESS, &result);
201 return result;
202 } else {
203 napi_create_int32(env, FALSE, &result);
204 return result;
205 }
206 }
207
Iswdigit(napi_env env,napi_callback_info info)208 static napi_value Iswdigit(napi_env env, napi_callback_info info)
209 {
210 size_t argc = PARAM_1;
211 napi_value args[1] = {nullptr};
212 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
213 size_t length = STRLENGTH;
214 size_t strResult = NO_ERR;
215 char ch[length];
216 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
217 int retVal = iswdigit((wint_t) * (char16_t *)ch);
218 napi_value result;
219 if (retVal != PARAM_0) {
220 napi_create_int32(env, SUCCESS, &result);
221 return result;
222 } else {
223 napi_create_int32(env, FALSE, &result);
224 return result;
225 }
226 }
IswdigitL(napi_env env,napi_callback_info info)227 static napi_value IswdigitL(napi_env env, napi_callback_info info)
228 {
229 size_t argc = PARAM_1;
230 napi_value args[1] = {nullptr};
231 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
232 size_t length = STRLENGTH;
233 size_t strResult = NO_ERR;
234 char ch[length];
235 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
236 int retVal = iswdigit_l((wint_t) * (char16_t *)ch, PARAM_0);
237 napi_value result;
238 if (retVal != PARAM_0) {
239 napi_create_int32(env, SUCCESS, &result);
240 return result;
241 } else {
242 napi_create_int32(env, FALSE, &result);
243 return result;
244 }
245 }
246
Iswgraph(napi_env env,napi_callback_info info)247 static napi_value Iswgraph(napi_env env, napi_callback_info info)
248 {
249 size_t argc = PARAM_1;
250 napi_value args[1] = {nullptr};
251 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
252 size_t length = STRLENGTH;
253 size_t strResult = NO_ERR;
254 char ch[length];
255 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
256 int retVal = iswgraph((wint_t) * (char16_t *)ch);
257 napi_value result;
258 if (retVal != PARAM_0) {
259 napi_create_int32(env, SUCCESS, &result);
260 return result;
261 } else {
262 napi_create_int32(env, FALSE, &result);
263 return result;
264 }
265 }
IswgraphL(napi_env env,napi_callback_info info)266 static napi_value IswgraphL(napi_env env, napi_callback_info info)
267 {
268 size_t argc = PARAM_1;
269 napi_value args[1] = {nullptr};
270 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
271 size_t length = STRLENGTH;
272 size_t strResult = NO_ERR;
273 char ch[length];
274 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
275 int retVal = iswgraph_l((wint_t) * (char16_t *)ch, PARAM_0);
276 napi_value result;
277 if (retVal != PARAM_0) {
278 napi_create_int32(env, SUCCESS, &result);
279 return result;
280 } else {
281 napi_create_int32(env, FALSE, &result);
282 return result;
283 }
284 }
285
Iswlower(napi_env env,napi_callback_info info)286 static napi_value Iswlower(napi_env env, napi_callback_info info)
287 {
288 size_t argc = PARAM_1;
289 napi_value args[1] = {nullptr};
290 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
291 size_t length = STRLENGTH;
292 size_t strResult = NO_ERR;
293 char ch[length];
294 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
295 int retVal = iswlower((wint_t) * (char16_t *)ch);
296 napi_value result;
297 if (retVal != PARAM_0) {
298 napi_create_int32(env, SUCCESS, &result);
299 return result;
300 } else {
301 napi_create_int32(env, FALSE, &result);
302 return result;
303 }
304 }
305
IswlowerL(napi_env env,napi_callback_info info)306 static napi_value IswlowerL(napi_env env, napi_callback_info info)
307 {
308 size_t argc = PARAM_1;
309 napi_value args[1] = {nullptr};
310 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
311 size_t length = STRLENGTH;
312 size_t strResult = NO_ERR;
313 char ch[length];
314 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
315 int retVal = iswlower_l((wint_t) * (char16_t *)ch, PARAM_0);
316 napi_value result;
317 if (retVal != PARAM_0) {
318 napi_create_int32(env, SUCCESS, &result);
319 return result;
320 } else {
321 napi_create_int32(env, FALSE, &result);
322 return result;
323 }
324 }
325
Iswprint(napi_env env,napi_callback_info info)326 static napi_value Iswprint(napi_env env, napi_callback_info info)
327 {
328 size_t argc = PARAM_1;
329 napi_value args[1] = {nullptr};
330 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
331 size_t length = STRLENGTH;
332 size_t strResult = NO_ERR;
333 char ch[length];
334 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
335 int retVal = iswprint((wint_t) * (char16_t *)ch);
336 napi_value result;
337 if (retVal != PARAM_0) {
338 napi_create_int32(env, SUCCESS, &result);
339 return result;
340 } else {
341 napi_create_int32(env, FALSE, &result);
342 return result;
343 }
344 }
345
IswprintL(napi_env env,napi_callback_info info)346 static napi_value IswprintL(napi_env env, napi_callback_info info)
347 {
348 size_t argc = PARAM_1;
349 napi_value args[1] = {nullptr};
350 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
351 size_t length = STRLENGTH;
352 size_t strResult = NO_ERR;
353 char ch[length];
354 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
355 int retVal = iswprint_l((wint_t) * (char16_t *)ch, PARAM_0);
356 napi_value result;
357 if (retVal != PARAM_0) {
358 napi_create_int32(env, SUCCESS, &result);
359 return result;
360 } else {
361 napi_create_int32(env, FALSE, &result);
362 return result;
363 }
364 }
365
Iswpunct(napi_env env,napi_callback_info info)366 static napi_value Iswpunct(napi_env env, napi_callback_info info)
367 {
368 size_t argc = PARAM_1;
369 napi_value args[1] = {nullptr};
370 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
371 size_t length = STRLENGTH;
372 size_t strResult = NO_ERR;
373 char ch[length];
374 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
375 int retVal = iswpunct((wint_t) * (char16_t *)ch);
376 napi_value result;
377 if (retVal != PARAM_0) {
378 napi_create_int32(env, SUCCESS, &result);
379 return result;
380 } else {
381 napi_create_int32(env, FALSE, &result);
382 return result;
383 }
384 }
385
IswpunctL(napi_env env,napi_callback_info info)386 static napi_value IswpunctL(napi_env env, napi_callback_info info)
387 {
388 size_t argc = PARAM_1;
389 napi_value args[1] = {nullptr};
390 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
391 size_t length = STRLENGTH;
392 size_t strResult = NO_ERR;
393 char ch[length];
394 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
395 int retVal = iswpunct_l((wint_t) * (char16_t *)ch, PARAM_0);
396 napi_value result;
397 if (retVal != PARAM_0) {
398 napi_create_int32(env, SUCCESS, &result);
399 return result;
400 } else {
401 napi_create_int32(env, FALSE, &result);
402 return result;
403 }
404 }
405
Iswspace(napi_env env,napi_callback_info info)406 static napi_value Iswspace(napi_env env, napi_callback_info info)
407 {
408 size_t argc = PARAM_1;
409 napi_value args[1] = {nullptr};
410 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
411 size_t length = STRLENGTH;
412 size_t strResult = NO_ERR;
413 char ch[length];
414 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
415 int retVal = iswspace((wint_t) * (char16_t *)ch);
416 napi_value result;
417 if (retVal != PARAM_0) {
418 napi_create_int32(env, SUCCESS, &result);
419 return result;
420 } else {
421 napi_create_int32(env, FALSE, &result);
422 return result;
423 }
424 }
IswspaceL(napi_env env,napi_callback_info info)425 static napi_value IswspaceL(napi_env env, napi_callback_info info)
426 {
427 size_t argc = PARAM_1;
428 napi_value args[1] = {nullptr};
429 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
430 size_t length = STRLENGTH;
431 size_t strResult = NO_ERR;
432 char ch[length];
433 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
434 int retVal = iswspace_l((wint_t) * (char16_t *)ch, PARAM_0);
435 napi_value result;
436 if (retVal != PARAM_0) {
437 napi_create_int32(env, SUCCESS, &result);
438 return result;
439 } else {
440 napi_create_int32(env, FALSE, &result);
441 return result;
442 }
443 }
444
Iswupper(napi_env env,napi_callback_info info)445 static napi_value Iswupper(napi_env env, napi_callback_info info)
446 {
447 size_t argc = PARAM_1;
448 napi_value args[1] = {nullptr};
449 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
450 size_t length = STRLENGTH;
451 size_t strResult = NO_ERR;
452 char ch[length];
453 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
454 int retVal = iswupper((wint_t) * (char16_t *)ch);
455 napi_value result;
456 if (retVal != PARAM_0) {
457 napi_create_int32(env, SUCCESS, &result);
458 return result;
459 } else {
460 napi_create_int32(env, FALSE, &result);
461 return result;
462 }
463 }
464
IswupperL(napi_env env,napi_callback_info info)465 static napi_value IswupperL(napi_env env, napi_callback_info info)
466 {
467 size_t argc = PARAM_1;
468 napi_value args[1] = {nullptr};
469 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
470 size_t length = STRLENGTH;
471 size_t strResult = NO_ERR;
472 char ch[length];
473 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
474 int retVal = iswupper_l((wint_t) * (char16_t *)ch, PARAM_0);
475 napi_value result;
476 if (retVal != PARAM_0) {
477 napi_create_int32(env, SUCCESS, &result);
478 return result;
479 } else {
480 napi_create_int32(env, FALSE, &result);
481 return result;
482 }
483 }
484
Iswctype(napi_env env,napi_callback_info info)485 static napi_value Iswctype(napi_env env, napi_callback_info info)
486 {
487 size_t argc = PARAM_2;
488 napi_value args[2] = {nullptr};
489 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
490 size_t length = STRLENGTH;
491 size_t strResult = NO_ERR;
492 char chFirst[length];
493 char chSecond[length];
494 napi_get_value_string_utf8(env, args[0], chFirst, length, &strResult);
495 napi_get_value_string_utf8(env, args[1], chSecond, length, &strResult);
496 int retVal = iswctype((wint_t) * (char16_t *)chFirst, wctype(chSecond));
497 napi_value result;
498 if (retVal != PARAM_0) {
499 napi_create_int32(env, SUCCESS, &result);
500 return result;
501 } else {
502 napi_create_int32(env, FALSE, &result);
503 return result;
504 }
505 }
506
IswctypeL(napi_env env,napi_callback_info info)507 static napi_value IswctypeL(napi_env env, napi_callback_info info)
508 {
509 size_t argc = PARAM_2;
510 napi_value args[2] = {nullptr};
511 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
512 size_t length = STRLENGTH;
513 size_t strResult = NO_ERR;
514 char chFirst[length];
515 char chSecond[length];
516 napi_get_value_string_utf8(env, args[0], chFirst, length, &strResult);
517 napi_get_value_string_utf8(env, args[1], chSecond, length, &strResult);
518 int retVal = iswctype_l((wint_t) * (char16_t *)chFirst, wctype(chSecond), PARAM_0);
519 napi_value result;
520 if (retVal != PARAM_0) {
521 napi_create_int32(env, SUCCESS, &result);
522 return result;
523 } else {
524 napi_create_int32(env, FALSE, &result);
525 return result;
526 }
527 }
528
Iswxdigit(napi_env env,napi_callback_info info)529 static napi_value Iswxdigit(napi_env env, napi_callback_info info)
530 {
531 size_t argc = PARAM_1;
532 napi_value args[1] = {nullptr};
533 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
534 size_t length = STRLENGTH;
535 size_t strResult = NO_ERR;
536 char ch[length];
537 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
538 int retVal = iswxdigit((wint_t) * (char16_t *)ch);
539 napi_value result;
540 if (retVal != PARAM_0) {
541 napi_create_int32(env, SUCCESS, &result);
542 return result;
543 } else {
544 napi_create_int32(env, FALSE, &result);
545 return result;
546 }
547 }
548
IswxdigitL(napi_env env,napi_callback_info info)549 static napi_value IswxdigitL(napi_env env, napi_callback_info info)
550 {
551 size_t argc = PARAM_1;
552 napi_value args[1] = {nullptr};
553 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
554 size_t length = STRLENGTH;
555 size_t strResult = NO_ERR;
556 char ch[length];
557 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
558 int retVal = iswxdigit_l((wint_t) * (char16_t *)ch, PARAM_0);
559 napi_value result;
560 if (retVal != PARAM_0) {
561 napi_create_int32(env, SUCCESS, &result);
562 return result;
563 } else {
564 napi_create_int32(env, FALSE, &result);
565 return result;
566 }
567 }
568
Towctrans(napi_env env,napi_callback_info info)569 static napi_value Towctrans(napi_env env, napi_callback_info info)
570 {
571 size_t argc = PARAM_1;
572 napi_value args[1] = {nullptr};
573 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
574 int param;
575 napi_get_value_int32(env, args[0], ¶m);
576 int towctrans_value = FAILD;
577
578 if (param == PARAM_0) {
579 wchar_t str[] = L"ABCD";
580 wctrans_t trans = wctrans("tolower");
581 for (int i = PARAM_0; i < wcslen(str); i++) {
582 str[i] = towctrans(str[i], trans);
583 }
584 if (wcscmp(str, L"abcd") == PARAM_0) {
585 towctrans_value = RETURN_0;
586 }
587 } else if (param == PARAM_1) {
588 wchar_t str[] = L"abcd";
589 wctrans_t trans = wctrans("toupper");
590 for (int i = PARAM_0; i < wcslen(str); i++) {
591 str[i] = towctrans(str[i], trans);
592 }
593 if (wcscmp(str, L"ABCD") == PARAM_0) {
594 towctrans_value = RETURN_0;
595 }
596 } else {
597 wchar_t str[] = L"Abcd";
598 for (int i = PARAM_0; i < wcslen(str); i++) {
599 str[i] = towctrans(str[i], PARAM_0);
600 }
601 if (wcscmp(str, L"Abcd") == PARAM_0) {
602 towctrans_value = RETURN_0;
603 }
604 }
605
606 napi_value result = nullptr;
607 napi_create_int32(env, towctrans_value, &result);
608
609 return result;
610 }
611
TowctransL(napi_env env,napi_callback_info info)612 static napi_value TowctransL(napi_env env, napi_callback_info info)
613 {
614 size_t argc = PARAM_1;
615 napi_value args[1] = {nullptr};
616 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
617 int param;
618 napi_get_value_int32(env, args[0], ¶m);
619 int towctrans_l_value = FAILD;
620 locale_t locale = nullptr;
621 if (param == PARAM_0) {
622 wchar_t str[] = L"ABCD";
623 wctrans_t trans = wctrans("tolower");
624 for (int i = PARAM_0; i < wcslen(str); i++) {
625 str[i] = towctrans_l(str[i], trans, locale);
626 }
627 if (wcscmp(str, L"abcd") == PARAM_0) {
628 towctrans_l_value = RETURN_0;
629 }
630 } else if (param == PARAM_1) {
631 wchar_t str[] = L"abcd";
632 wctrans_t trans = wctrans("toupper");
633 for (int i = PARAM_0; i < wcslen(str); i++) {
634 str[i] = towctrans_l(str[i], trans, locale);
635 }
636 if (wcscmp(str, L"ABCD") == PARAM_0) {
637 towctrans_l_value = RETURN_0;
638 }
639 } else {
640 wchar_t str[] = L"Abcd";
641 for (int i = PARAM_0; i < wcslen(str); i++) {
642 str[i] = towctrans_l(str[i], PARAM_0, locale);
643 }
644 if (wcscmp(str, L"Abcd") == PARAM_0) {
645 towctrans_l_value = RETURN_0;
646 }
647 }
648
649 napi_value result = nullptr;
650 napi_create_int32(env, towctrans_l_value, &result);
651
652 return result;
653 }
654
TowlowerL(napi_env env,napi_callback_info info)655 static napi_value TowlowerL(napi_env env, napi_callback_info info)
656 {
657 size_t argc = PARAM_1;
658 napi_value args[1] = {nullptr};
659 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
660 int param;
661 napi_get_value_int32(env, args[0], ¶m);
662 int towlowerLValue = FAILD;
663 locale_t locale = nullptr;
664 if (param == PARAM_0) {
665 char ch = 'A';
666 char result = towlower_l(ch, locale);
667 if (result == 'a') {
668 towlowerLValue = RETURN_0;
669 }
670 } else if (param == PARAM_1) {
671 char ch = PARAM_2;
672 char result = towlower_l(ch, locale);
673 if (result == ch) {
674 towlowerLValue = RETURN_0;
675 }
676
677 } else if (param == PARAM_2) {
678 char ch = 'a';
679 char result = towlower_l(ch, locale);
680 if (result == 'a') {
681 towlowerLValue = RETURN_0;
682 }
683 } else {
684 char ch = '$';
685 char result = towlower_l(ch, locale);
686 if (result == '$') {
687 towlowerLValue = RETURN_0;
688 }
689 }
690
691 napi_value result = nullptr;
692 napi_create_int32(env, towlowerLValue, &result);
693
694 return result;
695 }
696
TowupperL(napi_env env,napi_callback_info info)697 static napi_value TowupperL(napi_env env, napi_callback_info info)
698 {
699 size_t argc = PARAM_1;
700 napi_value args[1] = {nullptr};
701 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
702 int param;
703 napi_get_value_int32(env, args[0], ¶m);
704 int towupper_l_value = FAILD;
705 locale_t local = nullptr;
706 if (param == PARAM_0) {
707 char ch = 'a';
708 char result = towupper_l(ch, local);
709 if (result == 'A') {
710 towupper_l_value = RETURN_0;
711 }
712 } else if (param == PARAM_1) {
713 char ch = PARAM_2;
714 char result = towupper_l(ch, local);
715 if (result == ch) {
716 towupper_l_value = RETURN_0;
717 }
718
719 } else if (param == PARAM_2) {
720 char ch = 'A';
721 char result = towupper_l(ch, local);
722 if (result == 'A') {
723 towupper_l_value = RETURN_0;
724 }
725 } else {
726 char ch = '$';
727 char result = towupper_l(ch, local);
728 if (result == '$') {
729 towupper_l_value = RETURN_0;
730 }
731 }
732
733 napi_value result = nullptr;
734 napi_create_int32(env, towupper_l_value, &result);
735
736 return result;
737 }
738
Wctrans(napi_env env,napi_callback_info info)739 static napi_value Wctrans(napi_env env, napi_callback_info info)
740 {
741 size_t argc = PARAM_1;
742 napi_value args[1] = {nullptr};
743 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
744 int param;
745 napi_get_value_int32(env, args[0], ¶m);
746 int resultValue = FAILD;
747 if (param == PARAM_0) {
748 if (wctrans("tolower")) {
749 resultValue = RETURN_0;
750 }
751 } else {
752 if (wctrans("toupper")) {
753 resultValue = RETURN_0;
754 }
755 }
756
757 napi_value result = nullptr;
758 napi_create_int32(env, resultValue, &result);
759
760 return result;
761 }
762
WctransL(napi_env env,napi_callback_info info)763 static napi_value WctransL(napi_env env, napi_callback_info info)
764 {
765 size_t argc = PARAM_1;
766 napi_value args[1] = {nullptr};
767 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
768 int param;
769 napi_get_value_int32(env, args[0], ¶m);
770 int resultValue = FAILD;
771 locale_t locale = nullptr;
772 if (param == PARAM_0) {
773 if (wctrans_l("tolower", locale)) {
774 resultValue = RETURN_0;
775 }
776 } else {
777 if (wctrans_l("toupper", locale)) {
778 resultValue = RETURN_0;
779 }
780 }
781
782 napi_value result = nullptr;
783 napi_create_int32(env, resultValue, &result);
784
785 return result;
786 }
787
Wctype(napi_env env,napi_callback_info info)788 static napi_value Wctype(napi_env env, napi_callback_info info)
789 {
790 size_t argc = PARAM_1;
791 napi_value args[1] = {nullptr};
792 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
793 int param;
794 napi_get_value_int32(env, args[0], ¶m);
795 int resultValue = FAILD;
796 if (param == PARAM_0) {
797 wctype_t wt = wctype("alnum");
798 int result = iswctype(L'1', wt);
799 if (result == PARAM_1) {
800 resultValue = RETURN_0;
801 }
802 }
803
804 napi_value result = nullptr;
805 napi_create_int32(env, resultValue, &result);
806
807 return result;
808 }
809
WctypeL(napi_env env,napi_callback_info info)810 static napi_value WctypeL(napi_env env, napi_callback_info info)
811 {
812 size_t argc = PARAM_1;
813 napi_value args[1] = {nullptr};
814 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
815 int param;
816 napi_get_value_int32(env, args[0], ¶m);
817 int resultValue = FAILD;
818 locale_t locale = nullptr;
819 if (param == PARAM_0) {
820 wctype_t wt = wctype_l("alnum", locale);
821 int result = iswctype_l(L'1', wt, locale);
822 if (result == PARAM_1) {
823 resultValue = RETURN_0;
824 }
825 }
826
827 napi_value result = nullptr;
828 napi_create_int32(env, resultValue, &result);
829
830 return result;
831 }
832
833 EXTERN_C_START
Init(napi_env env,napi_value exports)834 static napi_value Init(napi_env env, napi_value exports)
835 {
836 napi_property_descriptor desc[] = {
837 {"iswalnum", nullptr, Iswalnum, nullptr, nullptr, nullptr, napi_default, nullptr},
838 {"iswalnumL", nullptr, IswalnumL, nullptr, nullptr, nullptr, napi_default, nullptr},
839 {"iswalpha", nullptr, Iswalpha, nullptr, nullptr, nullptr, napi_default, nullptr},
840 {"iswalphaL", nullptr, IswalphaL, nullptr, nullptr, nullptr, napi_default, nullptr},
841 {"iswblank", nullptr, Iswblank, nullptr, nullptr, nullptr, napi_default, nullptr},
842 {"iswblankL", nullptr, IswblankL, nullptr, nullptr, nullptr, napi_default, nullptr},
843 {"iswcntrl", nullptr, Iswcntrl, nullptr, nullptr, nullptr, napi_default, nullptr},
844 {"iswcntrlL", nullptr, IswcntrlL, nullptr, nullptr, nullptr, napi_default, nullptr},
845 {"iswdigit", nullptr, Iswdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
846 {"iswdigitL", nullptr, IswdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
847 {"iswgraph", nullptr, Iswgraph, nullptr, nullptr, nullptr, napi_default, nullptr},
848 {"iswgraphL", nullptr, IswgraphL, nullptr, nullptr, nullptr, napi_default, nullptr},
849 {"iswlower", nullptr, Iswlower, nullptr, nullptr, nullptr, napi_default, nullptr},
850 {"iswlowerL", nullptr, IswlowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
851 {"iswprint", nullptr, Iswprint, nullptr, nullptr, nullptr, napi_default, nullptr},
852 {"iswprintL", nullptr, IswprintL, nullptr, nullptr, nullptr, napi_default, nullptr},
853 {"iswpunct", nullptr, Iswpunct, nullptr, nullptr, nullptr, napi_default, nullptr},
854 {"iswpunctL", nullptr, IswpunctL, nullptr, nullptr, nullptr, napi_default, nullptr},
855 {"iswspace", nullptr, Iswspace, nullptr, nullptr, nullptr, napi_default, nullptr},
856 {"iswspaceL", nullptr, IswspaceL, nullptr, nullptr, nullptr, napi_default, nullptr},
857 {"iswupper", nullptr, Iswupper, nullptr, nullptr, nullptr, napi_default, nullptr},
858 {"iswupperL", nullptr, IswupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
859 {"iswctype", nullptr, Iswctype, nullptr, nullptr, nullptr, napi_default, nullptr},
860 {"iswctypeL", nullptr, IswctypeL, nullptr, nullptr, nullptr, napi_default, nullptr},
861 {"iswxdigit", nullptr, Iswxdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
862 {"iswxdigitL", nullptr, IswxdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
863 {"towctrans", nullptr, Towctrans, nullptr, nullptr, nullptr, napi_default, nullptr},
864 {"towctransL", nullptr, TowctransL, nullptr, nullptr, nullptr, napi_default, nullptr},
865 {"towlowerL", nullptr, TowlowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
866 {"towupperL", nullptr, TowupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
867 {"wctrans", nullptr, Wctrans, nullptr, nullptr, nullptr, napi_default, nullptr},
868 {"wctransL", nullptr, WctransL, nullptr, nullptr, nullptr, napi_default, nullptr},
869 {"wctype", nullptr, Wctype, nullptr, nullptr, nullptr, napi_default, nullptr},
870 {"wctypeL", nullptr, WctypeL, nullptr, nullptr, nullptr, napi_default, nullptr},
871 };
872 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
873 return exports;
874 }
875 EXTERN_C_END
876
877 static napi_module demoModule = {
878 .nm_version = 1,
879 .nm_flags = 0,
880 .nm_filename = nullptr,
881 .nm_register_func = Init,
882 .nm_modname = "dirent",
883 .nm_priv = ((void *)0),
884 .reserved = {0},
885 };
886
RegiswterEntryModule(void)887 extern "C" __attribute__((constructor)) void RegiswterEntryModule(void) { napi_module_register(&demoModule); }
888