1 /*@ Implementation of cs.h: character type and case conversion tables, tools.
2  *
3  * Copyright (c) 2017 - 2020 Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
4  * SPDX-License-Identifier: ISC
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 #undef su_FILE
19 #define su_FILE su_cs_ctype
20 #define su_SOURCE
21 #define su_SOURCE_CS_CTYPE
22 
23 #include "su/code.h"
24 
25 #include "su/cs.h"
26 #include "su/code-in.h"
27 
28 /* Include the constant su-make-cs-ctype.sh output */
29 #include "su/gen-cs-ctype.h" /* $(SU_SRCDIR) */
30 
31 sz
su_cs_cmp_case(char const * cp1,char const * cp2)32 su_cs_cmp_case(char const *cp1, char const *cp2){
33    sz rv;
34    NYD_IN;
35    ASSERT_NYD_EXEC(cp1 != NIL, rv = (cp2 == NIL) ? 0 : -1);
36    ASSERT_NYD_EXEC(cp2 != NIL, rv = 1);
37 
38    for(;;){
39       u8 c1, c2;
40 
41       c1 = su_cs_to_lower(*cp1++);
42       c2 = su_cs_to_lower(*cp2++);
43       if((rv = c1 - c2) != 0 || c1 == '\0')
44          break;
45    }
46    NYD_OU;
47    return rv;
48 }
49 
50 sz
su_cs_cmp_case_n(char const * cp1,char const * cp2,uz n)51 su_cs_cmp_case_n(char const *cp1, char const *cp2, uz n){
52    sz rv;
53    NYD_IN;
54    ASSERT_NYD_EXEC(cp1 != NIL, rv = (cp2 == NIL) ? 0 : -1);
55    ASSERT_NYD_EXEC(cp2 != NIL, rv = 1);
56 
57    for(rv = 0; n != 0; --n){
58       u8 c1, c2;
59 
60       c1 = su_cs_to_lower(*cp1++);
61       c2 = su_cs_to_lower(*cp2++);
62       if((rv = c1 - c2) != 0 || c1 == '\0')
63          break;
64    }
65    NYD_OU;
66    return rv;
67 }
68 
69 #include "su/code-ou.h"
70 /* s-it-mode */
71