../3rdparty/pcre/pcre_string_utils.c

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/************************************************* -
2* Perl-Compatible Regular Expressions * -
3*************************************************/ -
4 -
5/* PCRE is a library of functions to support regular expressions whose syntax -
6and semantics are as close as possible to those of the Perl 5 language. -
7 -
8 Written by Philip Hazel -
9 Copyright (c) 1997-2012 University of Cambridge -
10 -
11----------------------------------------------------------------------------- -
12Redistribution and use in source and binary forms, with or without -
13modification, are permitted provided that the following conditions are met: -
14 -
15 * Redistributions of source code must retain the above copyright notice, -
16 this list of conditions and the following disclaimer. -
17 -
18 * Redistributions in binary form must reproduce the above copyright -
19 notice, this list of conditions and the following disclaimer in the -
20 documentation and/or other materials provided with the distribution. -
21 -
22 * Neither the name of the University of Cambridge nor the names of its -
23 contributors may be used to endorse or promote products derived from -
24 this software without specific prior written permission. -
25 -
26THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -
27AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -
28IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -
29ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -
30LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -
31CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -
32SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -
33INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -
34CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -
35ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -
36POSSIBILITY OF SUCH DAMAGE. -
37----------------------------------------------------------------------------- -
38*/ -
39 -
40 -
41/* This module contains an internal function that is used to match an extended -
42class. It is used by both pcre_exec() and pcre_def_exec(). */ -
43 -
44 -
45#ifdef PCRE_HAVE_CONFIG_H -
46#include "config.h" -
47#endif -
48 -
49#include "pcre_internal.h" -
50 -
51#ifndef COMPILE_PCRE8 -
52 -
53/************************************************* -
54* Compare string utilities * -
55*************************************************/ -
56 -
57/* The following two functions compares two strings. Basically an strcmp -
58for non 8 bit characters. -
59 -
60Arguments: -
61 str1 first string -
62 str2 second string -
63 -
64Returns: 0 if both string are equal (like strcmp), 1 otherwise -
65*/ -
66 -
67int -
68PRIV(strcmp_uc_uc)(const pcre_uchar *str1, const pcre_uchar *str2) -
69{ -
70pcre_uchar c1;
executed (the execution status of this line is deduced): pcre_uchar c1;
-
71pcre_uchar c2;
executed (the execution status of this line is deduced): pcre_uchar c2;
-
72 -
73while (*str1 != '\0' || *str2 != '\0')
evaluated: *str1 != '\0'
TRUEFALSE
yes
Evaluation Count:50
yes
Evaluation Count:6
partially evaluated: *str2 != '\0'
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:6
0-50
74 { -
75 c1 = *str1++;
executed (the execution status of this line is deduced): c1 = *str1++;
-
76 c2 = *str2++;
executed (the execution status of this line is deduced): c2 = *str2++;
-
77 if (c1 != c2)
evaluated: c1 != c2
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:39
11-39
78 return ((c1 > c2) << 1) - 1;
executed: return ((c1 > c2) << 1) - 1;
Execution Count:11
11
79 }
executed: }
Execution Count:39
39
80/* Both length and characters must be equal. */ -
81return 0;
executed: return 0;
Execution Count:6
6
82} -
83 -
84int -
85PRIV(strcmp_uc_c8)(const pcre_uchar *str1, const char *str2) -
86{ -
87const pcre_uint8 *ustr2 = (pcre_uint8 *)str2;
executed (the execution status of this line is deduced): const pcre_uint8 *ustr2 = (pcre_uint8 *)str2;
-
88pcre_uchar c1;
executed (the execution status of this line is deduced): pcre_uchar c1;
-
89pcre_uchar c2;
executed (the execution status of this line is deduced): pcre_uchar c2;
-
90 -
91while (*str1 != '\0' || *ustr2 != '\0')
evaluated: *str1 != '\0'
TRUEFALSE
yes
Evaluation Count:75
yes
Evaluation Count:6
partially evaluated: *ustr2 != '\0'
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:6
0-75
92 { -
93 c1 = *str1++;
executed (the execution status of this line is deduced): c1 = *str1++;
-
94 c2 = (pcre_uchar)*ustr2++;
executed (the execution status of this line is deduced): c2 = (pcre_uchar)*ustr2++;
-
95 if (c1 != c2)
evaluated: c1 != c2
TRUEFALSE
yes
Evaluation Count:43
yes
Evaluation Count:32
32-43
96 return ((c1 > c2) << 1) - 1;
executed: return ((c1 > c2) << 1) - 1;
Execution Count:43
43
97 }
executed: }
Execution Count:32
32
98/* Both length and characters must be equal. */ -
99return 0;
executed: return 0;
Execution Count:6
6
100} -
101 -
102/* The following two functions compares two, fixed length -
103strings. Basically an strncmp for non 8 bit characters. -
104 -
105Arguments: -
106 str1 first string -
107 str2 second string -
108 num size of the string -
109 -
110Returns: 0 if both string are equal (like strcmp), 1 otherwise -
111*/ -
112 -
113int -
114PRIV(strncmp_uc_uc)(const pcre_uchar *str1, const pcre_uchar *str2, unsigned int num) -
115{ -
116pcre_uchar c1;
never executed (the execution status of this line is deduced): pcre_uchar c1;
-
117pcre_uchar c2;
never executed (the execution status of this line is deduced): pcre_uchar c2;
-
118 -
119while (num-- > 0)
never evaluated: num-- > 0
0
120 { -
121 c1 = *str1++;
never executed (the execution status of this line is deduced): c1 = *str1++;
-
122 c2 = *str2++;
never executed (the execution status of this line is deduced): c2 = *str2++;
-
123 if (c1 != c2)
never evaluated: c1 != c2
0
124 return ((c1 > c2) << 1) - 1;
never executed: return ((c1 > c2) << 1) - 1;
0
125 }
never executed: }
0
126/* Both length and characters must be equal. */ -
127return 0;
never executed: return 0;
0
128} -
129 -
130int -
131PRIV(strncmp_uc_c8)(const pcre_uchar *str1, const char *str2, unsigned int num) -
132{ -
133const pcre_uint8 *ustr2 = (pcre_uint8 *)str2;
executed (the execution status of this line is deduced): const pcre_uint8 *ustr2 = (pcre_uint8 *)str2;
-
134pcre_uchar c1;
executed (the execution status of this line is deduced): pcre_uchar c1;
-
135pcre_uchar c2;
executed (the execution status of this line is deduced): pcre_uchar c2;
-
136 -
137while (num-- > 0)
evaluated: num-- > 0
TRUEFALSE
yes
Evaluation Count:220
yes
Evaluation Count:3
3-220
138 { -
139 c1 = *str1++;
executed (the execution status of this line is deduced): c1 = *str1++;
-
140 c2 = (pcre_uchar)*ustr2++;
executed (the execution status of this line is deduced): c2 = (pcre_uchar)*ustr2++;
-
141 if (c1 != c2)
evaluated: c1 != c2
TRUEFALSE
yes
Evaluation Count:195
yes
Evaluation Count:25
25-195
142 return ((c1 > c2) << 1) - 1;
executed: return ((c1 > c2) << 1) - 1;
Execution Count:195
195
143 }
executed: }
Execution Count:25
25
144/* Both length and characters must be equal. */ -
145return 0;
executed: return 0;
Execution Count:3
3
146} -
147 -
148/* The following function returns with the length of -
149a zero terminated string. Basically an strlen for non 8 bit characters. -
150 -
151Arguments: -
152 str string -
153 -
154Returns: length of the string -
155*/ -
156 -
157unsigned int -
158PRIV(strlen_uc)(const pcre_uchar *str) -
159{ -
160unsigned int len = 0;
executed (the execution status of this line is deduced): unsigned int len = 0;
-
161while (*str++ != 0)
evaluated: *str++ != 0
TRUEFALSE
yes
Evaluation Count:11287
yes
Evaluation Count:368
368-11287
162 len++;
executed: len++;
Execution Count:11287
11287
163return len;
executed: return len;
Execution Count:368
368
164} -
165 -
166#endif /* COMPILE_PCRE8 */ -
167 -
168/* End of pcre_string_utils.c */ -
169 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial