• 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 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 <cctype>
17 #include <js_native_api.h>
18 #include <malloc.h>
19 #include <node_api.h>
20 
21 #define TRUE 1
22 #define FALSE 0
23 #define ERROR (-1)
24 #define STRLENGTH 8
25 #define INPUT_VALUE_ZERO 0
26 #define PARAM_0 0
27 #define PARAM_1 1
28 #define PARAM_2 2
29 #define PARAM_UNNORMAL (-1)
30 #define RETURN_0 0
31 #define FAILD (-1)
32 #define ERRON_0 0
33 #define SIZE_10 10
34 #define SIZE_100 100
35 #define SIZE_4096 4096
36 #define SIZE_8192 8192
37 #define SIZE_128 128
38 
Isalnum(napi_env env,napi_callback_info info)39 static napi_value Isalnum(napi_env env, napi_callback_info info)
40 {
41     size_t argc = PARAM_1;
42     napi_value args[1] = {nullptr};
43     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
44     size_t length = STRLENGTH;
45     size_t strResult = FALSE;
46     char ch[STRLENGTH];
47     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
48     int retVal = isalnum(static_cast<int>(ch[0]));
49     napi_value result;
50     if (retVal != FALSE) {
51         napi_create_int32(env, TRUE, &result);
52     } else {
53         napi_create_int32(env, FALSE, &result);
54     }
55     return result;
56 }
57 
IsalnumL(napi_env env,napi_callback_info info)58 static napi_value IsalnumL(napi_env env, napi_callback_info info)
59 {
60     size_t argc = PARAM_1;
61     napi_value args[1] = {nullptr};
62     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
63     size_t length = STRLENGTH;
64     size_t strResult = FALSE;
65     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
66     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
67     int retVal = isalnum_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
68     napi_value result;
69     if (retVal != FALSE) {
70         napi_create_int32(env, TRUE, &result);
71     } else {
72         napi_create_int32(env, FALSE, &result);
73     }
74     return result;
75 }
76 
Isalpha(napi_env env,napi_callback_info info)77 static napi_value Isalpha(napi_env env, napi_callback_info info)
78 {
79     size_t argc = PARAM_1;
80     napi_value args[1] = {nullptr};
81     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
82     size_t length = STRLENGTH;
83     size_t strResult = FALSE;
84     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
85     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
86     int retVal = isalpha(static_cast<int>(ch[0]));
87     napi_value result;
88     if (retVal != FALSE) {
89         napi_create_int32(env, TRUE, &result);
90     } else {
91         napi_create_int32(env, FALSE, &result);
92     }
93     return result;
94 }
95 
IsalphaL(napi_env env,napi_callback_info info)96 static napi_value IsalphaL(napi_env env, napi_callback_info info)
97 {
98     size_t argc = PARAM_1;
99     napi_value args[1] = {nullptr};
100     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
101     size_t length = STRLENGTH;
102     size_t strResult = FALSE;
103     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
104     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
105     int retVal = isalpha_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
106     napi_value result;
107     if (retVal != FALSE) {
108         napi_create_int32(env, TRUE, &result);
109     } else {
110         napi_create_int32(env, FALSE, &result);
111     }
112     return result;
113 }
114 
Isascii(napi_env env,napi_callback_info info)115 static napi_value Isascii(napi_env env, napi_callback_info info)
116 {
117     size_t argc = PARAM_1;
118     napi_value args[1] = {nullptr};
119     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
120     int first;
121     napi_get_value_int32(env, args[0], &first);
122     int retVal = isascii(first);
123     napi_value result;
124     if (retVal != FALSE) {
125         napi_create_int32(env, TRUE, &result);
126     } else {
127         napi_create_int32(env, FALSE, &result);
128     }
129     return result;
130 }
131 
Isblank(napi_env env,napi_callback_info info)132 static napi_value Isblank(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 = FALSE;
139     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
140     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
141     int retVal = isblank(static_cast<int>(ch[0]));
142     napi_value result;
143     if (retVal != FALSE) {
144         napi_create_int32(env, TRUE, &result);
145     } else {
146         napi_create_int32(env, FALSE, &result);
147     }
148     return result;
149 }
150 
IsblankL(napi_env env,napi_callback_info info)151 static napi_value IsblankL(napi_env env, napi_callback_info info)
152 {
153     size_t argc = PARAM_1;
154     napi_value args[1] = {nullptr};
155     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
156     size_t length = STRLENGTH;
157     size_t strResult = FALSE;
158     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
159     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
160     int retVal = isblank_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
161     napi_value result;
162     if (retVal != FALSE) {
163         napi_create_int32(env, TRUE, &result);
164     } else {
165         napi_create_int32(env, FALSE, &result);
166     }
167     return result;
168 }
169 
Iscntrl(napi_env env,napi_callback_info info)170 static napi_value Iscntrl(napi_env env, napi_callback_info info)
171 {
172     size_t argc = PARAM_1;
173     napi_value args[1] = {nullptr};
174     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
175     int first;
176     napi_get_value_int32(env, args[0], &first);
177     int retVal = iscntrl(first);
178     napi_value result;
179     if (retVal != FALSE) {
180         napi_create_int32(env, TRUE, &result);
181     } else {
182         napi_create_int32(env, FALSE, &result);
183     }
184     return result;
185 }
186 
IscntrlL(napi_env env,napi_callback_info info)187 static napi_value IscntrlL(napi_env env, napi_callback_info info)
188 {
189     size_t argc = PARAM_1;
190     napi_value args[1] = {nullptr};
191     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
192     int first;
193     napi_get_value_int32(env, args[0], &first);
194     int retVal = iscntrl_l(first, INPUT_VALUE_ZERO);
195     napi_value result;
196     if (retVal != FALSE) {
197         napi_create_int32(env, TRUE, &result);
198     } else {
199         napi_create_int32(env, FALSE, &result);
200     }
201     return result;
202 }
203 
Isdigit(napi_env env,napi_callback_info info)204 static napi_value Isdigit(napi_env env, napi_callback_info info)
205 {
206     size_t argc = PARAM_1;
207     napi_value args[1] = {nullptr};
208     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
209     size_t length = STRLENGTH;
210     size_t strResult = FALSE;
211     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
212     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
213     int retVal = isdigit(static_cast<int>(ch[0]));
214     napi_value result;
215     if (retVal != FALSE) {
216         napi_create_int32(env, TRUE, &result);
217     } else {
218         napi_create_int32(env, FALSE, &result);
219     }
220     return result;
221 }
IsdigitL(napi_env env,napi_callback_info info)222 static napi_value IsdigitL(napi_env env, napi_callback_info info)
223 {
224     size_t argc = PARAM_1;
225     napi_value args[1] = {nullptr};
226     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
227     size_t length = STRLENGTH;
228     size_t strResult = FALSE;
229     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
230     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
231     int retVal = isdigit_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
232     napi_value result;
233     if (retVal != FALSE) {
234         napi_create_int32(env, TRUE, &result);
235     } else {
236         napi_create_int32(env, FALSE, &result);
237     }
238     return result;
239 }
240 
Isgraph(napi_env env,napi_callback_info info)241 static napi_value Isgraph(napi_env env, napi_callback_info info)
242 {
243     size_t argc = PARAM_1;
244     napi_value args[1] = {nullptr};
245     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
246     size_t length = STRLENGTH;
247     size_t strResult = FALSE;
248     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
249     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
250     int retVal = isgraph(static_cast<int>(ch[0]));
251     napi_value result;
252     if (retVal != FALSE) {
253         napi_create_int32(env, TRUE, &result);
254     } else {
255         napi_create_int32(env, FALSE, &result);
256     }
257     return result;
258 }
IsgraphL(napi_env env,napi_callback_info info)259 static napi_value IsgraphL(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     size_t length = STRLENGTH;
265     size_t strResult = FALSE;
266     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
267     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
268     int retVal = isgraph_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
269     napi_value result;
270     if (retVal != FALSE) {
271         napi_create_int32(env, TRUE, &result);
272     } else {
273         napi_create_int32(env, FALSE, &result);
274     }
275     return result;
276 }
277 
Islower(napi_env env,napi_callback_info info)278 static napi_value Islower(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     size_t length = STRLENGTH;
284     size_t strResult = FALSE;
285     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
286     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
287     int retVal = islower(static_cast<int>(ch[0]));
288     napi_value result;
289     if (retVal != FALSE) {
290         napi_create_int32(env, TRUE, &result);
291     } else {
292         napi_create_int32(env, FALSE, &result);
293     }
294     return result;
295 }
296 
IslowerL(napi_env env,napi_callback_info info)297 static napi_value IslowerL(napi_env env, napi_callback_info info)
298 {
299     size_t argc = PARAM_1;
300     napi_value args[1] = {nullptr};
301     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
302     size_t length = STRLENGTH;
303     size_t strResult = FALSE;
304     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
305     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
306     int retVal = islower_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
307     napi_value result;
308     if (retVal != FALSE) {
309         napi_create_int32(env, TRUE, &result);
310     } else {
311         napi_create_int32(env, FALSE, &result);
312     }
313     return result;
314 }
315 
Isprint(napi_env env,napi_callback_info info)316 static napi_value Isprint(napi_env env, napi_callback_info info)
317 {
318     size_t argc = PARAM_1;
319     napi_value args[1] = {nullptr};
320     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
321     size_t length = STRLENGTH;
322     size_t strResult = FALSE;
323     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
324     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
325     int retVal = isprint(static_cast<int>(ch[0]));
326     napi_value result;
327     if (retVal != FALSE) {
328         napi_create_int32(env, TRUE, &result);
329     } else {
330         napi_create_int32(env, FALSE, &result);
331     }
332     return result;
333 }
334 
IsprintL(napi_env env,napi_callback_info info)335 static napi_value IsprintL(napi_env env, napi_callback_info info)
336 {
337     size_t argc = PARAM_1;
338     napi_value args[1] = {nullptr};
339     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
340     size_t length = STRLENGTH;
341     size_t strResult = FALSE;
342     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
343     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
344     int retVal = isprint_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
345     napi_value result;
346     if (retVal != FALSE) {
347         napi_create_int32(env, TRUE, &result);
348     } else {
349         napi_create_int32(env, FALSE, &result);
350     }
351     return result;
352 }
353 
Ispunct(napi_env env,napi_callback_info info)354 static napi_value Ispunct(napi_env env, napi_callback_info info)
355 {
356     size_t argc = PARAM_1;
357     napi_value args[1] = {nullptr};
358     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
359     size_t length = STRLENGTH;
360     size_t strResult = FALSE;
361     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
362     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
363     int retVal = ispunct(static_cast<int>(ch[0]));
364     napi_value result;
365     if (retVal != FALSE) {
366         napi_create_int32(env, TRUE, &result);
367     } else {
368         napi_create_int32(env, FALSE, &result);
369     }
370     return result;
371 }
372 
IspunctL(napi_env env,napi_callback_info info)373 static napi_value IspunctL(napi_env env, napi_callback_info info)
374 {
375     size_t argc = PARAM_1;
376     napi_value args[1] = {nullptr};
377     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
378     size_t length = STRLENGTH;
379     size_t strResult = FALSE;
380     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
381     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
382     int retVal = ispunct_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
383     napi_value result;
384     if (retVal != FALSE) {
385         napi_create_int32(env, TRUE, &result);
386     } else {
387         napi_create_int32(env, FALSE, &result);
388     }
389     return result;
390 }
391 
Isspace(napi_env env,napi_callback_info info)392 static napi_value Isspace(napi_env env, napi_callback_info info)
393 {
394     size_t argc = PARAM_1;
395     napi_value args[1] = {nullptr};
396     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
397     size_t length = STRLENGTH;
398     size_t strResult = FALSE;
399     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
400     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
401     int retVal = isspace(static_cast<int>(ch[0]));
402     napi_value result;
403     if (retVal != FALSE) {
404         napi_create_int32(env, TRUE, &result);
405     } else {
406         napi_create_int32(env, FALSE, &result);
407     }
408     return result;
409 }
IsspaceL(napi_env env,napi_callback_info info)410 static napi_value IsspaceL(napi_env env, napi_callback_info info)
411 {
412     size_t argc = PARAM_1;
413     napi_value args[1] = {nullptr};
414     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
415     size_t length = STRLENGTH;
416     size_t strResult = FALSE;
417     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
418     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
419     int retVal = isspace_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
420     napi_value result;
421     if (retVal != FALSE) {
422         napi_create_int32(env, TRUE, &result);
423     } else {
424         napi_create_int32(env, FALSE, &result);
425     }
426     return result;
427 }
428 
Isupper(napi_env env,napi_callback_info info)429 static napi_value Isupper(napi_env env, napi_callback_info info)
430 {
431     size_t argc = PARAM_1;
432     napi_value args[1] = {nullptr};
433     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
434     size_t length = STRLENGTH;
435     size_t strResult = FALSE;
436     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
437     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
438     int retVal = isupper(static_cast<int>(ch[0]));
439     napi_value result;
440     if (retVal != FALSE) {
441         napi_create_int32(env, TRUE, &result);
442     } else {
443         napi_create_int32(env, FALSE, &result);
444     }
445     return result;
446 }
447 
IsupperL(napi_env env,napi_callback_info info)448 static napi_value IsupperL(napi_env env, napi_callback_info info)
449 {
450     size_t argc = PARAM_1;
451     napi_value args[1] = {nullptr};
452     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
453     size_t length = STRLENGTH;
454     size_t strResult = FALSE;
455     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
456     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
457     int retVal = isupper_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
458     napi_value result;
459     if (retVal != FALSE) {
460         napi_create_int32(env, TRUE, &result);
461     } else {
462         napi_create_int32(env, FALSE, &result);
463     }
464     return result;
465 }
466 
Isxdigit(napi_env env,napi_callback_info info)467 static napi_value Isxdigit(napi_env env, napi_callback_info info)
468 {
469     size_t argc = PARAM_1;
470     napi_value args[1] = {nullptr};
471     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
472     size_t length = STRLENGTH;
473     size_t strResult = FALSE;
474     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
475     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
476     int retVal = isxdigit(static_cast<int>(ch[0]));
477     napi_value result;
478     if (retVal != FALSE) {
479         napi_create_int32(env, TRUE, &result);
480     } else {
481         napi_create_int32(env, FALSE, &result);
482     }
483     return result;
484 }
485 
IsxdigitL(napi_env env,napi_callback_info info)486 static napi_value IsxdigitL(napi_env env, napi_callback_info info)
487 {
488     size_t argc = PARAM_1;
489     napi_value args[1] = {nullptr};
490     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
491     size_t length = STRLENGTH;
492     size_t strResult = FALSE;
493     char *ch = static_cast<char *>(malloc(sizeof(char) * length));
494     napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
495     int retVal = isxdigit_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
496     napi_value result;
497     if (retVal != FALSE) {
498         napi_create_int32(env, TRUE, &result);
499     } else {
500         napi_create_int32(env, FALSE, &result);
501     }
502     return result;
503 }
504 
Toascii(napi_env env,napi_callback_info info)505 static napi_value Toascii(napi_env env, napi_callback_info info)
506 {
507     int c1 = 'a' + SIZE_128;
508     char char_value = toascii(c1);
509     napi_value result;
510     napi_create_string_utf8(env, &char_value, NAPI_AUTO_LENGTH, &result);
511     return result;
512 }
513 
Tolower(napi_env env,napi_callback_info info)514 static napi_value Tolower(napi_env env, napi_callback_info info)
515 {
516     size_t argc = PARAM_1;
517     napi_value args[1] = {nullptr};
518     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
519     int param;
520     napi_get_value_int32(env, args[0], &param);
521     int resultValue = FAILD;
522     if (param == PARAM_0) {
523         char ch = 'A';
524         char result = tolower(ch);
525         if (result == 'a') {
526             resultValue = RETURN_0;
527         }
528     } else if (param == PARAM_1) {
529         char ch = PARAM_2;
530         char result = tolower(ch);
531         if (result == ch) {
532             resultValue = RETURN_0;
533         }
534 
535     } else if (param == PARAM_2) {
536         char ch = 'a';
537         char result = tolower(ch);
538         if (result == 'a') {
539             resultValue = RETURN_0;
540         }
541     } else {
542         char ch = '$';
543         char result = tolower(ch);
544         if (result == '$') {
545             resultValue = RETURN_0;
546         }
547     }
548 
549     napi_value result = nullptr;
550     napi_create_int32(env, resultValue, &result);
551 
552     return result;
553 }
554 
TolowerL(napi_env env,napi_callback_info info)555 static napi_value TolowerL(napi_env env, napi_callback_info info)
556 {
557     size_t argc = PARAM_1;
558     napi_value args[1] = {nullptr};
559     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
560     int param;
561     napi_get_value_int32(env, args[0], &param);
562     locale_t locale = nullptr;
563 
564     int resultValue = FAILD;
565     if (param == PARAM_0) {
566         char ch = 'A';
567         char result = tolower_l(ch, locale);
568         if (result == 'a') {
569             resultValue = RETURN_0;
570         }
571     } else if (param == PARAM_1) {
572         char ch = PARAM_2;
573         char result = tolower_l(ch, locale);
574         if (result == ch) {
575             resultValue = RETURN_0;
576         }
577 
578     } else if (param == PARAM_2) {
579         char ch = 'a';
580         char result = tolower_l(ch, locale);
581         if (result == 'a') {
582             resultValue = RETURN_0;
583         }
584     } else {
585         char ch = '$';
586         char result = tolower_l(ch, locale);
587         if (result == '$') {
588             resultValue = RETURN_0;
589         }
590     }
591 
592     napi_value result = nullptr;
593     napi_create_int32(env, resultValue, &result);
594 
595     return result;
596 }
597 
Toupper(napi_env env,napi_callback_info info)598 static napi_value Toupper(napi_env env, napi_callback_info info)
599 {
600     size_t argc = PARAM_1;
601     napi_value args[1] = {nullptr};
602     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
603     int param;
604     napi_get_value_int32(env, args[0], &param);
605     int resultValue = FAILD;
606 
607     if (param == PARAM_0) {
608         char ch = 'a';
609         char result = toupper(ch);
610         if (result == 'A') {
611             resultValue = RETURN_0;
612         }
613     } else if (param == PARAM_1) {
614         char ch = PARAM_2;
615         char result = toupper(ch);
616         if (result == ch) {
617             resultValue = RETURN_0;
618         }
619 
620     } else if (param == PARAM_2) {
621         char ch = 'A';
622         char result = toupper(ch);
623         if (result == 'A') {
624             resultValue = RETURN_0;
625         }
626     } else {
627         char ch = '$';
628         char result = toupper(ch);
629         if (result == '$') {
630             resultValue = RETURN_0;
631         }
632     }
633 
634     napi_value result = nullptr;
635     napi_create_int32(env, resultValue, &result);
636 
637     return result;
638 }
639 
ToupperL(napi_env env,napi_callback_info info)640 static napi_value ToupperL(napi_env env, napi_callback_info info)
641 {
642     size_t argc = PARAM_1;
643     napi_value args[1] = {nullptr};
644     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
645     int param;
646     napi_get_value_int32(env, args[0], &param);
647     locale_t locale = nullptr;
648     int resultValue = FAILD;
649     if (param == PARAM_0) {
650         char ch = 'a';
651         char result = toupper_l(ch, locale);
652         if (result == 'A') {
653             resultValue = RETURN_0;
654         }
655     } else if (param == PARAM_1) {
656         char ch = PARAM_2;
657         char result = toupper_l(ch, locale);
658         if (result == ch) {
659             resultValue = RETURN_0;
660         }
661 
662     } else if (param == PARAM_2) {
663         char ch = 'A';
664         char result = toupper_l(ch, locale);
665         if (result == 'A') {
666             resultValue = RETURN_0;
667         }
668     } else {
669         char ch = '$';
670         char result = toupper_l(ch, locale);
671         if (result == '$') {
672             resultValue = RETURN_0;
673         }
674     }
675 
676     napi_value result = nullptr;
677     napi_create_int32(env, resultValue, &result);
678 
679     return result;
680 }
681 
682 EXTERN_C_START
Init(napi_env env,napi_value exports)683 static napi_value Init(napi_env env, napi_value exports)
684 {
685     napi_property_descriptor desc[] = {
686         {"isalnum", nullptr, Isalnum, nullptr, nullptr, nullptr, napi_default, nullptr},
687         {"isalnumL", nullptr, IsalnumL, nullptr, nullptr, nullptr, napi_default, nullptr},
688         {"isalpha", nullptr, Isalpha, nullptr, nullptr, nullptr, napi_default, nullptr},
689         {"isalphaL", nullptr, IsalphaL, nullptr, nullptr, nullptr, napi_default, nullptr},
690         {"isascii", nullptr, Isascii, nullptr, nullptr, nullptr, napi_default, nullptr},
691         {"isblank", nullptr, Isblank, nullptr, nullptr, nullptr, napi_default, nullptr},
692         {"isblankL", nullptr, IsblankL, nullptr, nullptr, nullptr, napi_default, nullptr},
693         {"iscntrl", nullptr, Iscntrl, nullptr, nullptr, nullptr, napi_default, nullptr},
694         {"iscntrlL", nullptr, IscntrlL, nullptr, nullptr, nullptr, napi_default, nullptr},
695         {"isdigit", nullptr, Isdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
696         {"isdigitL", nullptr, IsdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
697         {"isgraph", nullptr, Isgraph, nullptr, nullptr, nullptr, napi_default, nullptr},
698         {"isgraphL", nullptr, IsgraphL, nullptr, nullptr, nullptr, napi_default, nullptr},
699         {"islower", nullptr, Islower, nullptr, nullptr, nullptr, napi_default, nullptr},
700         {"islowerL", nullptr, IslowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
701         {"isprint", nullptr, Isprint, nullptr, nullptr, nullptr, napi_default, nullptr},
702         {"isprintL", nullptr, IsprintL, nullptr, nullptr, nullptr, napi_default, nullptr},
703         {"ispunct", nullptr, Ispunct, nullptr, nullptr, nullptr, napi_default, nullptr},
704         {"ispunctL", nullptr, IspunctL, nullptr, nullptr, nullptr, napi_default, nullptr},
705         {"isspace", nullptr, Isspace, nullptr, nullptr, nullptr, napi_default, nullptr},
706         {"isspaceL", nullptr, IsspaceL, nullptr, nullptr, nullptr, napi_default, nullptr},
707         {"isupper", nullptr, Isupper, nullptr, nullptr, nullptr, napi_default, nullptr},
708         {"isupperL", nullptr, IsupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
709         {"isxdigit", nullptr, Isxdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
710         {"isxdigitL", nullptr, IsxdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
711         {"toascii", nullptr, Toascii, nullptr, nullptr, nullptr, napi_default, nullptr},
712         {"tolower", nullptr, Tolower, nullptr, nullptr, nullptr, napi_default, nullptr},
713         {"tolowerL", nullptr, TolowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
714         {"toupper", nullptr, Toupper, nullptr, nullptr, nullptr, napi_default, nullptr},
715         {"toupperL", nullptr, ToupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
716     };
717     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
718     return exports;
719 }
720 EXTERN_C_END
721 
722 static napi_module demoModule = {
723     .nm_version = 1,
724     .nm_flags = 0,
725     .nm_filename = nullptr,
726     .nm_register_func = Init,
727     .nm_modname = "ctypendk",
728     .nm_priv = ((void *)0),
729     .reserved = {0},
730 };
731 
RegisterEntryModule(void)732 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
733