qmimemagicrule.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/mimetypes/qmimemagicrule.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8static const char magicRuleTypes_string[] =-
9 "invalid\0"-
10 "string\0"-
11 "host16\0"-
12 "host32\0"-
13 "big16\0"-
14 "big32\0"-
15 "little16\0"-
16 "little32\0"-
17 "byte\0"-
18 "\0";-
19-
20static const int magicRuleTypes_indices[] = {-
21 0, 8, 15, 22, 29, 35, 41, 50, 59, 65, 0-
22};-
23-
24QMimeMagicRule::Type QMimeMagicRule::type(const QByteArray &theTypeName)-
25{-
26 for (int i = String; i <= Byte
i <= ByteDescription
TRUEevaluated 7377 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
; ++i) {
0-7377
27 if (theTypeName == magicRuleTypes_string + magicRuleTypes_indices[i]
theTypeName ==...pes_indices[i]Description
TRUEevaluated 4058 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3319 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
3319-4058
28 return
executed 4058 times by 1 test: return Type(i);
Executed by:
  • tst_QMimeDatabase
Type(i);
executed 4058 times by 1 test: return Type(i);
Executed by:
  • tst_QMimeDatabase
4058
29 }
executed 3319 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
3319
30 return
never executed: return Invalid;
Invalid;
never executed: return Invalid;
0
31}-
32-
33QByteArray QMimeMagicRule::typeName(QMimeMagicRule::Type theType)-
34{-
35 return
never executed: return magicRuleTypes_string + magicRuleTypes_indices[theType];
magicRuleTypes_string + magicRuleTypes_indices[theType];
never executed: return magicRuleTypes_string + magicRuleTypes_indices[theType];
0
36}-
37-
38class QMimeMagicRulePrivate-
39{-
40public:-
41 bool operator==(const QMimeMagicRulePrivate &other) const;-
42-
43 QMimeMagicRule::Type type;-
44 QByteArray value;-
45 int startPos;-
46 int endPos;-
47 QByteArray mask;-
48-
49 QByteArray pattern;-
50 quint32 number;-
51 quint32 numberMask;-
52-
53 typedef bool (*MatchFunction)(const QMimeMagicRulePrivate *d, const QByteArray &data);-
54 MatchFunction matchFunction;-
55};-
56-
57bool QMimeMagicRulePrivate::operator==(const QMimeMagicRulePrivate &other) const-
58{-
59 return
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
type == other.type
type == other.typeDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
60 value == other.value
value == other.valueDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
61 startPos == other.startPos
startPos == other.startPosDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
62 endPos == other.endPos
endPos == other.endPosDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
63 mask == other.mask
mask == other.maskDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
64 pattern == other.pattern
pattern == other.patternDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
65 number == other.number
number == other.numberDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
66 numberMask == other.numberMask
numberMask == other.numberMaskDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
67 matchFunction == other.matchFunction
matchFunction ....matchFunctionDescription
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return type == other.type && value == other.value && startPos == other.startPos && endPos == other.endPos && mask == other.mask && pattern == other.pattern && number == other.number && numberMask == other.numberMask && matchFunction == other.matchFunction;
0
68}-
69-
70-
71bool QMimeMagicRule::matchSubstring(const char *dataPtr, int dataSize, int rangeStart, int rangeLength,-
72 int valueLength, const char *valueData, const char *mask)-
73{-
74-
75-
76 const int dataNeeded = qMin(rangeLength + valueLength - 1, dataSize - rangeStart);-
77-
78 if (!mask
!maskDescription
TRUEevaluated 9901 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 17592 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
9901-17592
79-
80-
81 bool found = false;-
82 for (int i = rangeStart; i < rangeStart + rangeLength
i < rangeStart + rangeLengthDescription
TRUEevaluated 39384 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 5928 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++i) {
5928-39384
83 if (i + valueLength > dataSize
i + valueLength > dataSizeDescription
TRUEevaluated 3928 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 35456 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
3928-35456
84 break;
executed 3928 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
3928
85-
86 if (memcmp(valueData, dataPtr + i, valueLength) == 0
memcmp(valueDa...ueLength) == 0Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 35411 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
45-35411
87 found = true;-
88 break;
executed 45 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
45
89 }-
90 }
executed 35411 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
35411
91 if (!found
!foundDescription
TRUEevaluated 9856 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 45 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
45-9856
92 return
executed 9856 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
false;
executed 9856 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
9856
93 }
executed 45 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else {
45
94 bool found = false;-
95 const char *readDataBase = dataPtr + rangeStart;-
96-
97-
98-
99-
100 const int maxStartPos = dataNeeded - valueLength + 1;-
101 for (int i = 0; i < maxStartPos
i < maxStartPosDescription
TRUEevaluated 38620 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 17592 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++i) {
17592-38620
102 const char *d = readDataBase + i;-
103 bool valid = true;-
104 for (int idx = 0; idx < valueLength
idx < valueLengthDescription
TRUEevaluated 39071 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 46 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++idx) {
46-39071
105 if (((*
((*d++) & mask...] & mask[idx])Description
TRUEevaluated 38574 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 497 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
d++) & mask[idx]) != (valueData[idx] & mask[idx])
((*d++) & mask...] & mask[idx])Description
TRUEevaluated 38574 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 497 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
497-38574
106 valid = false;-
107 break;
executed 38574 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
38574
108 }-
109 }
executed 497 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
497
110 if (valid
validDescription
TRUEevaluated 46 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 38574 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
46-38574
111 found = true;
executed 46 times by 1 test: found = true;
Executed by:
  • tst_QMimeDatabase
46
112 }
executed 38620 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
38620
113 if (!found
!foundDescription
TRUEevaluated 17546 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 46 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
46-17546
114 return
executed 17546 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
false;
executed 17546 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
17546
115 }
executed 46 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
46
116-
117 return
executed 91 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
true;
executed 91 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
91
118}-
119-
120static bool matchString(const QMimeMagicRulePrivate *d, const QByteArray &data)-
121{-
122 const int rangeLength = d->endPos - d->startPos + 1;-
123 return
executed 17377 times by 1 test: return QMimeMagicRule::matchSubstring(data.constData(), data.size(), d->startPos, rangeLength, d->pattern.size(), d->pattern.constData(), d->mask.constData());
Executed by:
  • tst_QMimeDatabase
QMimeMagicRule::matchSubstring(data.constData(), data.size(), d->startPos, rangeLength, d->pattern.size(), d->pattern.constData(), d->mask.constData());
executed 17377 times by 1 test: return QMimeMagicRule::matchSubstring(data.constData(), data.size(), d->startPos, rangeLength, d->pattern.size(), d->pattern.constData(), d->mask.constData());
Executed by:
  • tst_QMimeDatabase
17377
124}-
125-
126template <typename T>-
127static bool matchNumber(const QMimeMagicRulePrivate *d, const QByteArray &data)-
128{-
129 const T value(d->number);-
130 const T mask(d->numberMask);-
131-
132-
133-
134-
135 const char *p = data.constData() + d->startPos;-
136 const char *e = data.constData() + qMin(data.size() - int(sizeof(T)), d->endPos + 1);-
137 for ( ; p <= e
p <= eDescription
TRUEevaluated 3457 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 1854 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++p) {
1854-3457
138 if ((
(qFromUnaligne...(value & mask)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3444 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
qFromUnaligned<T>(reinterpret_cast<const uchar *>(p)) & mask) == (value & mask)
(qFromUnaligne...(value & mask)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3444 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
13-3444
139 return
executed 13 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
true;
executed 13 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
13
140 }
executed 3444 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
3444
141-
142 return
executed 1854 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
false;
executed 1854 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
1854
143}-
144-
145static inline QByteArray makePattern(const QByteArray &value)-
146{-
147 QByteArray pattern(value.size(), Qt::Uninitialized);-
148 char *data = pattern.data();-
149-
150 const char *p = value.constData();-
151 const char *e = p + value.size();-
152 for ( ; p < e
p < eDescription
TRUEevaluated 33647 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3431 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++p) {
3431-33647
153 if (*
*p == '\\'Description
TRUEevaluated 2255 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 31392 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p == '\\'
*p == '\\'Description
TRUEevaluated 2255 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 31392 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& ++
++p < eDescription
TRUEevaluated 2255 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
p < e
++p < eDescription
TRUEevaluated 2255 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
) {
0-31392
154 if (*
*p == 'x'Description
TRUEevaluated 775 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 1480 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p == 'x'
*p == 'x'Description
TRUEevaluated 775 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 1480 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
775-1480
155 char c = 0;-
156 for (int i = 0; i < 2
i < 2Description
TRUEevaluated 1550 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 765 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& p + 1 < e
p + 1 < eDescription
TRUEevaluated 1540 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++i) {
10-1550
157 ++p;-
158 if (*
*p >= '0'Description
TRUEevaluated 1540 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
p >= '0'
*p >= '0'Description
TRUEevaluated 1540 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
&& *
*p <= '9'Description
TRUEevaluated 1260 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 280 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p <= '9'
*p <= '9'Description
TRUEevaluated 1260 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 280 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
0-1540
159 c = (c << 4) + *p - '0';
executed 1260 times by 1 test: c = (c << 4) + *p - '0';
Executed by:
  • tst_QMimeDatabase
1260
160 else if (*
*p >= 'a'Description
TRUEevaluated 220 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p >= 'a'
*p >= 'a'Description
TRUEevaluated 220 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& *
*p <= 'f'Description
TRUEevaluated 220 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
p <= 'f'
*p <= 'f'Description
TRUEevaluated 220 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-220
161 c = (c << 4) + *p - 'a' + 10;
executed 220 times by 1 test: c = (c << 4) + *p - 'a' + 10;
Executed by:
  • tst_QMimeDatabase
220
162 else if (*
*p >= 'A'Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
p >= 'A'
*p >= 'A'Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
&& *
*p <= 'F'Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
p <= 'F'
*p <= 'F'Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-60
163 c = (c << 4) + *p - 'A' + 10;
executed 60 times by 1 test: c = (c << 4) + *p - 'A' + 10;
Executed by:
  • tst_QMimeDatabase
60
164 else-
165 continue;
never executed: continue;
0
166 }-
167 *data++ = c;-
168 }
executed 775 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else if (*
*p >= '0'Description
TRUEevaluated 1435 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 45 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p >= '0'
*p >= '0'Description
TRUEevaluated 1435 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 45 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& *
*p <= '7'Description
TRUEevaluated 1280 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 155 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p <= '7'
*p <= '7'Description
TRUEevaluated 1280 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 155 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
45-1435
169 char c = *p - '0';-
170 if (p + 1 < e
p + 1 < eDescription
TRUEevaluated 1195 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 85 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& p[1] >= '0'
p[1] >= '0'Description
TRUEevaluated 1195 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
&& p[1] <= '7'
p[1] <= '7'Description
TRUEevaluated 1060 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 135 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
0-1195
171 c = (c << 3) + *(++p) - '0';-
172 if (p + 1 < e
p + 1 < eDescription
TRUEevaluated 1055 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 5 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& p[1] >= '0'
p[1] >= '0'Description
TRUEevaluated 1055 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
&& p[1] <= '7'
p[1] <= '7'Description
TRUEevaluated 1045 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& p[-1] <= '3'
p[-1] <= '3'Description
TRUEevaluated 1045 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-1055
173 c = (c << 3) + *(++p) - '0';
executed 1045 times by 1 test: c = (c << 3) + *(++p) - '0';
Executed by:
  • tst_QMimeDatabase
1045
174 }
executed 1060 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
1060
175 *data++ = c;-
176 }
executed 1280 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else if (*
*p == 'n'Description
TRUEevaluated 75 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 125 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p == 'n'
*p == 'n'Description
TRUEevaluated 75 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 125 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
75-1280
177 *data++ = '\n';-
178 }
executed 75 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else if (*
*p == 'r'Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 115 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p == 'r'
*p == 'r'Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 115 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
10-115
179 *data++ = '\r';-
180 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else if (*
*p == 't'Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 100 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
p == 't'
*p == 't'Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 100 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
10-100
181 *data++ = '\t';-
182 }
executed 15 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else {
15
183 *data++ = *p;-
184 }
executed 100 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
100
185 } else {-
186 *data++ = *p;-
187 }
executed 31392 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
31392
188 }-
189 pattern.truncate(data - pattern.data());-
190-
191 return
executed 3431 times by 1 test: return pattern;
Executed by:
  • tst_QMimeDatabase
pattern;
executed 3431 times by 1 test: return pattern;
Executed by:
  • tst_QMimeDatabase
3431
192}-
193-
194-
195-
196-
197-
198QMimeMagicRule::QMimeMagicRule(const QString &typeStr,-
199 const QByteArray &theValue,-
200 const QString &offsets,-
201 const QByteArray &theMask,-
202 QString *errorString) :-
203 d(new QMimeMagicRulePrivate)-
204{-
205 d->value = theValue;-
206 d->mask = theMask;-
207 d->matchFunction = 0;-
208-
209 d->type = QMimeMagicRule::type(typeStr.toLatin1());-
210 if (d->type == Invalid
d->type == InvalidDescription
TRUEnever evaluated
FALSEevaluated 4058 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
0-4058
211 *errorString = ([]() -> QString { enum { Size = sizeof(u"" "Type %s is not supported")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "Type %s is not supported" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return
never executed: return qstring_literal_temp;
qstring_literal_temp;
never executed: return qstring_literal_temp;
}()).arg(typeStr);
0
212 }
never executed: end of block
0
213-
214-
215 const int colonIndex = offsets.indexOf(QLatin1Char(':'));-
216 const QString startPosStr = colonIndex == -1
colonIndex == -1Description
TRUEevaluated 3566 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 492 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
? offsets : offsets.mid(0, colonIndex);
492-3566
217 const QString endPosStr = colonIndex == -1
colonIndex == -1Description
TRUEevaluated 3566 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 492 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
? offsets : offsets.mid(colonIndex + 1);
492-3566
218 if (!QMimeTypeParserBase::parseNumber(startPosStr, &d->startPos, errorString)
!QMimeTypePars..., errorString)Description
TRUEnever evaluated
FALSEevaluated 4058 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
||
0-4058
219 !QMimeTypeParserBase::parseNumber(endPosStr, &d->endPos, errorString)
!QMimeTypePars..., errorString)Description
TRUEnever evaluated
FALSEevaluated 4058 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
0-4058
220 d->type = Invalid;-
221 return;
never executed: return;
0
222 }-
223-
224 if (d->value.isEmpty()
d->value.isEmpty()Description
TRUEnever evaluated
FALSEevaluated 4058 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
0-4058
225 d->type = Invalid;-
226 if (errorString
errorStringDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
227 *
never executed: *errorString = QLatin1String("Invalid empty magic rule value");
errorString = QLatin1String("Invalid empty magic rule value");
never executed: *errorString = QLatin1String("Invalid empty magic rule value");
0
228 return;
never executed: return;
0
229 }-
230-
231 if (d->type >= Host16
d->type >= Host16Description
TRUEevaluated 627 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3431 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
&& d->type <= Byte
d->type <= ByteDescription
TRUEevaluated 627 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
) {
0-3431
232 bool ok;-
233 d->number = d->value.toUInt(&ok, 0);-
234 if (!ok
!okDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 625 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
2-625
235 d->type = Invalid;-
236 if (errorString
errorStringDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-2
237 *
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule value \"%1\"").arg( QString::fromLatin1(d->value));
Executed by:
  • tst_QMimeDatabase
errorString = QString::fromLatin1("Invalid magic rule value \"%1\"").arg(
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule value \"%1\"").arg( QString::fromLatin1(d->value));
Executed by:
  • tst_QMimeDatabase
2
238 QString::fromLatin1(d->value));
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule value \"%1\"").arg( QString::fromLatin1(d->value));
Executed by:
  • tst_QMimeDatabase
2
239 return;
executed 2 times by 1 test: return;
Executed by:
  • tst_QMimeDatabase
2
240 }-
241 d->numberMask = !d->mask.isEmpty()
!d->mask.isEmpty()Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 575 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
? d->mask.toUInt(&ok, 0) : 0;
50-575
242 }
executed 625 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
625
243-
244 switch (d->type) {-
245 case
executed 3431 times by 1 test: case String:
Executed by:
  • tst_QMimeDatabase
String:
executed 3431 times by 1 test: case String:
Executed by:
  • tst_QMimeDatabase
3431
246 d->pattern = makePattern(d->value);-
247 d->pattern.squeeze();-
248 if (!d->mask.isEmpty()
!d->mask.isEmpty()Description
TRUEevaluated 29 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 3402 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
29-3402
249 if (d->mask.size() < 4
d->mask.size() < 4Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
|| !d->mask.startsWith("0x")
!d->mask.startsWith("0x")Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 27 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
0-29
250 d->type = Invalid;-
251 if (errorString
errorStringDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-2
252 *
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
errorString = QString::fromLatin1("Invalid magic rule mask \"%1\"").arg(
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
2
253 QString::fromLatin1(d->mask));
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
2
254 return;
executed 2 times by 1 test: return;
Executed by:
  • tst_QMimeDatabase
2
255 }-
256 const QByteArray &tempMask = QByteArray::fromHex(QByteArray::fromRawData(-
257 d->mask.constData() + 2, d->mask.size() - 2));-
258 if (tempMask.size() != d->pattern.size()
tempMask.size(...pattern.size()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 25 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
2-25
259 d->type = Invalid;-
260 if (errorString
errorStringDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-2
261 *
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask size \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
errorString = QString::fromLatin1("Invalid magic rule mask size \"%1\"").arg(
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask size \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
2
262 QString::fromLatin1(d->mask));
executed 2 times by 1 test: *errorString = QString::fromLatin1("Invalid magic rule mask size \"%1\"").arg( QString::fromLatin1(d->mask));
Executed by:
  • tst_QMimeDatabase
2
263 return;
executed 2 times by 1 test: return;
Executed by:
  • tst_QMimeDatabase
2
264 }-
265 d->mask = tempMask;-
266 }
executed 25 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
else {
25
267 d->mask.fill(char(-1), d->pattern.size());-
268 }
executed 3402 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
3402
269 d->mask.squeeze();-
270 d->matchFunction = matchString;-
271 break;
executed 3427 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
3427
272 case
executed 205 times by 1 test: case Byte:
Executed by:
  • tst_QMimeDatabase
Byte:
executed 205 times by 1 test: case Byte:
Executed by:
  • tst_QMimeDatabase
205
273 if (d->number <= quint8(-1)
d->number <= quint8(-1)Description
TRUEevaluated 205 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
) {
0-205
274 if (d->numberMask == 0
d->numberMask == 0Description
TRUEevaluated 205 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
)
0-205
275 d->numberMask = quint8(-1);
executed 205 times by 1 test: d->numberMask = quint8(-1);
Executed by:
  • tst_QMimeDatabase
205
276 d->matchFunction = matchNumber<quint8>;-
277 }
executed 205 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
205
278 break;
executed 205 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
205
279 case
executed 65 times by 1 test: case Big16:
Executed by:
  • tst_QMimeDatabase
Big16:
executed 65 times by 1 test: case Big16:
Executed by:
  • tst_QMimeDatabase
65
280 case
executed 20 times by 1 test: case Host16:
Executed by:
  • tst_QMimeDatabase
Host16:
executed 20 times by 1 test: case Host16:
Executed by:
  • tst_QMimeDatabase
20
281 case
executed 85 times by 1 test: case Little16:
Executed by:
  • tst_QMimeDatabase
Little16:
executed 85 times by 1 test: case Little16:
Executed by:
  • tst_QMimeDatabase
85
282 if (d->number <= quint16(-1)
d->number <= quint16(-1)Description
TRUEevaluated 170 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
) {
0-170
283 d->number = d->type == Little16
d->type == Little16Description
TRUEevaluated 85 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 85 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
? qFromLittleEndian<quint16>(d->number) : qFromBigEndian<quint16>(d->number);
85
284 if (d->numberMask == 0
d->numberMask == 0Description
TRUEevaluated 165 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 5 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
5-165
285 d->numberMask = quint16(-1);
executed 165 times by 1 test: d->numberMask = quint16(-1);
Executed by:
  • tst_QMimeDatabase
165
286 d->matchFunction = matchNumber<quint16>;-
287 }
executed 170 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
170
288 break;
executed 170 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
170
289 case
executed 95 times by 1 test: case Big32:
Executed by:
  • tst_QMimeDatabase
Big32:
executed 95 times by 1 test: case Big32:
Executed by:
  • tst_QMimeDatabase
95
290 case
executed 20 times by 1 test: case Host32:
Executed by:
  • tst_QMimeDatabase
Host32:
executed 20 times by 1 test: case Host32:
Executed by:
  • tst_QMimeDatabase
20
291 case
executed 135 times by 1 test: case Little32:
Executed by:
  • tst_QMimeDatabase
Little32:
executed 135 times by 1 test: case Little32:
Executed by:
  • tst_QMimeDatabase
135
292 if (d->number <= quint32(-1)
d->number <= quint32(-1)Description
TRUEevaluated 250 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
) {
0-250
293 d->number = d->type == Little32
d->type == Little32Description
TRUEevaluated 135 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 115 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
? qFromLittleEndian<quint32>(d->number) : qFromBigEndian<quint32>(d->number);
115-135
294 if (d->numberMask == 0
d->numberMask == 0Description
TRUEevaluated 205 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 45 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
45-205
295 d->numberMask = quint32(-1);
executed 205 times by 1 test: d->numberMask = quint32(-1);
Executed by:
  • tst_QMimeDatabase
205
296 d->matchFunction = matchNumber<quint32>;-
297 }
executed 250 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
250
298 break;
executed 250 times by 1 test: break;
Executed by:
  • tst_QMimeDatabase
250
299 default
never executed: default:
:
never executed: default:
0
300 break;
never executed: break;
0
301 }-
302}-
303-
304QMimeMagicRule::QMimeMagicRule(const QMimeMagicRule &other) :-
305 d(new QMimeMagicRulePrivate(*other.d))-
306{-
307}
executed 4058 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
4058
308-
309QMimeMagicRule::~QMimeMagicRule()-
310{-
311}-
312-
313QMimeMagicRule &QMimeMagicRule::operator=(const QMimeMagicRule &other)-
314{-
315 *d = *other.d;-
316 return
never executed: return *this;
*this;
never executed: return *this;
0
317}-
318-
319bool QMimeMagicRule::operator==(const QMimeMagicRule &other) const-
320{-
321 return
never executed: return d == other.d || *d == *other.d;
d == other.d
d == other.dDescription
TRUEnever evaluated
FALSEnever evaluated
||
never executed: return d == other.d || *d == *other.d;
0
322 *
*d == *other.dDescription
TRUEnever evaluated
FALSEnever evaluated
d == *other.d
*d == *other.dDescription
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return d == other.d || *d == *other.d;
0
323}-
324-
325QMimeMagicRule::Type QMimeMagicRule::type() const-
326{-
327 return
never executed: return d->type;
d->type;
never executed: return d->type;
0
328}-
329-
330QByteArray QMimeMagicRule::value() const-
331{-
332 return
never executed: return d->value;
d->value;
never executed: return d->value;
0
333}-
334-
335int QMimeMagicRule::startPos() const-
336{-
337 return
never executed: return d->startPos;
d->startPos;
never executed: return d->startPos;
0
338}-
339-
340int QMimeMagicRule::endPos() const-
341{-
342 return
never executed: return d->endPos;
d->endPos;
never executed: return d->endPos;
0
343}-
344-
345QByteArray QMimeMagicRule::mask() const-
346{-
347 QByteArray result = d->mask;-
348 if (d->type == String
d->type == StringDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
349-
350 result = "0x" + result.toHex();-
351 }
never executed: end of block
0
352 return
never executed: return result;
result;
never executed: return result;
0
353}-
354-
355bool QMimeMagicRule::isValid() const-
356{-
357 return
executed 4058 times by 1 test: return d->matchFunction;
Executed by:
  • tst_QMimeDatabase
d->matchFunction;
executed 4058 times by 1 test: return d->matchFunction;
Executed by:
  • tst_QMimeDatabase
4058
358}-
359-
360bool QMimeMagicRule::matches(const QByteArray &data) const-
361{-
362 const bool ok = d->matchFunction
d->matchFunctionDescription
TRUEevaluated 19244 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEnever evaluated
&& d->matchFunction(d.data(), data)
d->matchFuncti....data(), data)Description
TRUEevaluated 59 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 19185 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
;
0-19244
363 if (!ok
!okDescription
TRUEevaluated 19185 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 59 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
59-19185
364 return
executed 19185 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
false;
executed 19185 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
19185
365-
366-
367 if (m_subMatches.isEmpty()
m_subMatches.isEmpty()Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 22 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
)
22-37
368 return
executed 37 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
true;
executed 37 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
37
369-
370-
371-
372 for ( QList<QMimeMagicRule>::const_iterator it = m_subMatches.begin(), end = m_subMatches.end() ;-
373 it != end
it != endDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
; ++it ) {
18-22
374 if ((*
(*it).matches(data)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
it).matches(data)
(*it).matches(data)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
FALSEevaluated 18 times by 1 test
Evaluated by:
  • tst_QMimeDatabase
) {
4-18
375-
376 return
executed 4 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
true;
executed 4 times by 1 test: return true;
Executed by:
  • tst_QMimeDatabase
4
377 }-
378 }
executed 18 times by 1 test: end of block
Executed by:
  • tst_QMimeDatabase
18
379 return
executed 18 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
false;
executed 18 times by 1 test: return false;
Executed by:
  • tst_QMimeDatabase
18
380-
381-
382}-
383-
384-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9