• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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], &param);
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], &param);
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], &param);
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], &param);
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], &param);
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], &param);
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], &param);
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], &param);
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