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