/src/CMake/Source/kwsys/String.c
Line | Count | Source |
1 | | /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
2 | | file Copyright.txt or https://cmake.org/licensing#kwsys for details. */ |
3 | | #ifdef KWSYS_STRING_C |
4 | | /* |
5 | | All code in this source file is conditionally compiled to work-around |
6 | | template definition auto-search on VMS. Other source files in this |
7 | | directory that use the stl string cause the compiler to load this |
8 | | source to try to get the definition of the string template. This |
9 | | condition blocks the compiler from seeing the symbols defined here. |
10 | | */ |
11 | | # include "kwsysPrivate.h" |
12 | | # include KWSYS_HEADER(String.h) |
13 | | |
14 | | /* Work-around CMake dependency scanning limitation. This must |
15 | | duplicate the above list of headers. */ |
16 | | # if 0 |
17 | | # include "String.h.in" |
18 | | # endif |
19 | | |
20 | | /* Select an implementation for strcasecmp. */ |
21 | | # if defined(_MSC_VER) |
22 | | # define KWSYS_STRING_USE_STRICMP |
23 | | # include <string.h> |
24 | | # elif defined(__GNUC__) |
25 | | # define KWSYS_STRING_USE_STRCASECMP |
26 | | # include <strings.h> |
27 | | # else |
28 | | /* Table to convert upper case letters to lower case and leave all |
29 | | other characters alone. */ |
30 | | static char kwsysString_strcasecmp_tolower[] = { |
31 | | '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', |
32 | | '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', |
33 | | '\022', '\023', '\024', '\025', '\026', '\027', '\030', '\031', '\032', |
34 | | '\033', '\034', '\035', '\036', '\037', '\040', '\041', '\042', '\043', |
35 | | '\044', '\045', '\046', '\047', '\050', '\051', '\052', '\053', '\054', |
36 | | '\055', '\056', '\057', '\060', '\061', '\062', '\063', '\064', '\065', |
37 | | '\066', '\067', '\070', '\071', '\072', '\073', '\074', '\075', '\076', |
38 | | '\077', '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', |
39 | | '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', '\160', |
40 | | '\161', '\162', '\163', '\164', '\165', '\166', '\167', '\170', '\171', |
41 | | '\172', '\133', '\134', '\135', '\136', '\137', '\140', '\141', '\142', |
42 | | '\143', '\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153', |
43 | | '\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163', '\164', |
44 | | '\165', '\166', '\167', '\170', '\171', '\172', '\173', '\174', '\175', |
45 | | '\176', '\177', '\200', '\201', '\202', '\203', '\204', '\205', '\206', |
46 | | '\207', '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', |
47 | | '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', '\230', |
48 | | '\231', '\232', '\233', '\234', '\235', '\236', '\237', '\240', '\241', |
49 | | '\242', '\243', '\244', '\245', '\246', '\247', '\250', '\251', '\252', |
50 | | '\253', '\254', '\255', '\256', '\257', '\260', '\261', '\262', '\263', |
51 | | '\264', '\265', '\266', '\267', '\270', '\271', '\272', '\273', '\274', |
52 | | '\275', '\276', '\277', '\300', '\301', '\302', '\303', '\304', '\305', |
53 | | '\306', '\307', '\310', '\311', '\312', '\313', '\314', '\315', '\316', |
54 | | '\317', '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', |
55 | | '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', '\340', |
56 | | '\341', '\342', '\343', '\344', '\345', '\346', '\347', '\350', '\351', |
57 | | '\352', '\353', '\354', '\355', '\356', '\357', '\360', '\361', '\362', |
58 | | '\363', '\364', '\365', '\366', '\367', '\370', '\371', '\372', '\373', |
59 | | '\374', '\375', '\376', '\377' |
60 | | }; |
61 | | # endif |
62 | | |
63 | | /*--------------------------------------------------------------------------*/ |
64 | | int kwsysString_strcasecmp(char const* lhs, char const* rhs) |
65 | 0 | { |
66 | | # if defined(KWSYS_STRING_USE_STRICMP) |
67 | | return _stricmp(lhs, rhs); |
68 | | # elif defined(KWSYS_STRING_USE_STRCASECMP) |
69 | | return strcasecmp(lhs, rhs); |
70 | | # else |
71 | | char const* const lower = kwsysString_strcasecmp_tolower; |
72 | | unsigned char const* us1 = (unsigned char const*)lhs; |
73 | | unsigned char const* us2 = (unsigned char const*)rhs; |
74 | | int result; |
75 | | while ((result = lower[*us1] - lower[*us2++], result == 0) && *us1++) { |
76 | | } |
77 | | return result; |
78 | | # endif |
79 | 0 | } |
80 | | |
81 | | /*--------------------------------------------------------------------------*/ |
82 | | int kwsysString_strncasecmp(char const* lhs, char const* rhs, size_t n) |
83 | 0 | { |
84 | | # if defined(KWSYS_STRING_USE_STRICMP) |
85 | | return _strnicmp(lhs, rhs, n); |
86 | | # elif defined(KWSYS_STRING_USE_STRCASECMP) |
87 | | return strncasecmp(lhs, rhs, n); |
88 | | # else |
89 | | char const* const lower = kwsysString_strcasecmp_tolower; |
90 | | unsigned char const* us1 = (unsigned char const*)lhs; |
91 | | unsigned char const* us2 = (unsigned char const*)rhs; |
92 | | int result = 0; |
93 | | while (n && (result = lower[*us1] - lower[*us2++], result == 0) && *us1++) { |
94 | | --n; |
95 | | } |
96 | | return result; |
97 | | # endif |
98 | 0 | } |
99 | | |
100 | | #endif /* KWSYS_STRING_C */ |