io/qfilesystementry.cpp

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/**************************************************************************** -
2** -
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -
4** Contact: http://www.qt-project.org/legal -
5** -
6** This file is part of the QtCore module of the Qt Toolkit. -
7** -
8** $QT_BEGIN_LICENSE:LGPL$ -
9** Commercial License Usage -
10** Licensees holding valid commercial Qt licenses may use this file in -
11** accordance with the commercial license agreement provided with the -
12** Software or, alternatively, in accordance with the terms contained in -
13** a written agreement between you and Digia. For licensing terms and -
14** conditions see http://qt.digia.com/licensing. For further information -
15** use the contact form at http://qt.digia.com/contact-us. -
16** -
17** GNU Lesser General Public License Usage -
18** Alternatively, this file may be used under the terms of the GNU Lesser -
19** General Public License version 2.1 as published by the Free Software -
20** Foundation and appearing in the file LICENSE.LGPL included in the -
21** packaging of this file. Please review the following information to -
22** ensure the GNU Lesser General Public License version 2.1 requirements -
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -
24** -
25** In addition, as a special exception, Digia gives you certain additional -
26** rights. These rights are described in the Digia Qt LGPL Exception -
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -
28** -
29** GNU General Public License Usage -
30** Alternatively, this file may be used under the terms of the GNU -
31** General Public License version 3.0 as published by the Free Software -
32** Foundation and appearing in the file LICENSE.GPL included in the -
33** packaging of this file. Please review the following information to -
34** ensure the GNU General Public License version 3.0 requirements will be -
35** met: http://www.gnu.org/copyleft/gpl.html. -
36** -
37** -
38** $QT_END_LICENSE$ -
39** -
40****************************************************************************/ -
41 -
42#include "qfilesystementry_p.h" -
43 -
44#include <QtCore/qdir.h> -
45#include <QtCore/qfile.h> -
46#include <QtCore/private/qfsfileengine_p.h> -
47#ifdef Q_OS_WIN -
48#include <QtCore/qstringbuilder.h> -
49#endif -
50 -
51QT_BEGIN_NAMESPACE -
52 -
53#ifdef Q_OS_WIN -
54static bool isUncRoot(const QString &server) -
55{ -
56 QString localPath = QDir::toNativeSeparators(server); -
57 if (!localPath.startsWith(QLatin1String("\\\\"))) -
58 return false; -
59 -
60 int idx = localPath.indexOf(QLatin1Char('\\'), 2); -
61 if (idx == -1 || idx + 1 == localPath.length()) -
62 return true; -
63 -
64 localPath = localPath.right(localPath.length() - idx - 1).trimmed(); -
65 return localPath.isEmpty(); -
66} -
67 -
68static inline QString fixIfRelativeUncPath(const QString &path) -
69{ -
70 QString currentPath = QDir::currentPath(); -
71 if (currentPath.startsWith(QLatin1String("//"))) -
72 return currentPath % QChar(QLatin1Char('/')) % path; -
73 return path; -
74} -
75#endif -
76 -
77QFileSystemEntry::QFileSystemEntry() -
78 : m_lastSeparator(-1), -
79 m_firstDotInFileName(-1), -
80 m_lastDotInFileName(-1) -
81{ -
82}
executed: }
Execution Count:171176
171176
83 -
84/*! -
85 \internal -
86 Use this constructor when the path is supplied by user code, as it may contain a mix -
87 of '/' and the native separator. -
88 */ -
89QFileSystemEntry::QFileSystemEntry(const QString &filePath) -
90 : m_filePath(QDir::fromNativeSeparators(filePath)), -
91 m_lastSeparator(-2), -
92 m_firstDotInFileName(-2), -
93 m_lastDotInFileName(0) -
94{ -
95}
executed: }
Execution Count:97523
97523
96 -
97/*! -
98 \internal -
99 Use this constructor when the path is guaranteed to be in internal format, i.e. all -
100 directory separators are '/' and not the native separator. -
101 */ -
102QFileSystemEntry::QFileSystemEntry(const QString &filePath, FromInternalPath /* dummy */) -
103 : m_filePath(filePath), -
104 m_lastSeparator(-2), -
105 m_firstDotInFileName(-2), -
106 m_lastDotInFileName(0) -
107{ -
108}
executed: }
Execution Count:11799
11799
109 -
110/*! -
111 \internal -
112 Use this constructor when the path comes from a native API -
113 */ -
114QFileSystemEntry::QFileSystemEntry(const NativePath &nativeFilePath, FromNativePath /* dummy */) -
115 : m_nativeFilePath(nativeFilePath), -
116 m_lastSeparator(-2), -
117 m_firstDotInFileName(-2), -
118 m_lastDotInFileName(0) -
119{ -
120}
executed: }
Execution Count:90742
90742
121 -
122QFileSystemEntry::QFileSystemEntry(const QString &filePath, const NativePath &nativeFilePath) -
123 : m_filePath(QDir::fromNativeSeparators(filePath)), -
124 m_nativeFilePath(nativeFilePath), -
125 m_lastSeparator(-2), -
126 m_firstDotInFileName(-2), -
127 m_lastDotInFileName(0) -
128{ -
129}
never executed: }
0
130 -
131QString QFileSystemEntry::filePath() const -
132{ -
133 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
134 return m_filePath;
executed: return m_filePath;
Execution Count:336226
336226
135} -
136 -
137QFileSystemEntry::NativePath QFileSystemEntry::nativeFilePath() const -
138{ -
139 resolveNativeFilePath();
executed (the execution status of this line is deduced): resolveNativeFilePath();
-
140 return m_nativeFilePath;
executed: return m_nativeFilePath;
Execution Count:136123
136123
141} -
142 -
143void QFileSystemEntry::resolveFilePath() const -
144{ -
145 if (m_filePath.isEmpty() && !m_nativeFilePath.isEmpty()) {
evaluated: m_filePath.isEmpty()
TRUEFALSE
yes
Evaluation Count:177645
yes
Evaluation Count:468964
evaluated: !m_nativeFilePath.isEmpty()
TRUEFALSE
yes
Evaluation Count:176989
yes
Evaluation Count:655
655-468964
146#if defined(QFILESYSTEMENTRY_NATIVE_PATH_IS_UTF16) -
147 m_filePath = QDir::fromNativeSeparators(m_nativeFilePath); -
148#ifdef Q_OS_WIN -
149 if (m_filePath.startsWith(QLatin1String("//?/UNC/"))) -
150 m_filePath = m_filePath.remove(2,6); -
151 if (m_filePath.startsWith(QLatin1String("//?/"))) -
152 m_filePath = m_filePath.remove(0,4); -
153#endif -
154#else -
155 m_filePath = QDir::fromNativeSeparators(QFile::decodeName(m_nativeFilePath));
executed (the execution status of this line is deduced): m_filePath = QDir::fromNativeSeparators(QFile::decodeName(m_nativeFilePath));
-
156#endif -
157 }
executed: }
Execution Count:176974
176974
158}
executed: }
Execution Count:646437
646437
159 -
160void QFileSystemEntry::resolveNativeFilePath() const -
161{ -
162 if (!m_filePath.isEmpty() && m_nativeFilePath.isEmpty()) {
evaluated: !m_filePath.isEmpty()
TRUEFALSE
yes
Evaluation Count:135420
yes
Evaluation Count:701
evaluated: m_nativeFilePath.isEmpty()
TRUEFALSE
yes
Evaluation Count:47036
yes
Evaluation Count:88385
701-135420
163#ifdef Q_OS_WIN -
164 QString filePath = m_filePath; -
165 if (isRelative()) -
166 filePath = fixIfRelativeUncPath(m_filePath); -
167 m_nativeFilePath = QFSFileEnginePrivate::longFileName(QDir::toNativeSeparators(filePath)); -
168#elif defined(QFILESYSTEMENTRY_NATIVE_PATH_IS_UTF16) -
169 m_nativeFilePath = QDir::toNativeSeparators(m_filePath); -
170#else -
171 m_nativeFilePath = QFile::encodeName(QDir::toNativeSeparators(m_filePath));
executed (the execution status of this line is deduced): m_nativeFilePath = QFile::encodeName(QDir::toNativeSeparators(m_filePath));
-
172#endif -
173 }
executed: }
Execution Count:47037
47037
174}
executed: }
Execution Count:136123
136123
175 -
176QString QFileSystemEntry::fileName() const -
177{ -
178 findLastSeparator();
executed (the execution status of this line is deduced): findLastSeparator();
-
179#if defined(Q_OS_WIN) -
180 if (m_lastSeparator == -1 && m_filePath.length() >= 2 && m_filePath.at(1) == QLatin1Char(':')) -
181 return m_filePath.mid(2); -
182#endif -
183 return m_filePath.mid(m_lastSeparator + 1);
executed: return m_filePath.mid(m_lastSeparator + 1);
Execution Count:265141
265141
184} -
185 -
186QString QFileSystemEntry::path() const -
187{ -
188 findLastSeparator();
executed (the execution status of this line is deduced): findLastSeparator();
-
189 if (m_lastSeparator == -1) {
evaluated: m_lastSeparator == -1
TRUEFALSE
yes
Evaluation Count:206
yes
Evaluation Count:10333
206-10333
190#if defined(Q_OS_WIN) -
191 if (m_filePath.length() >= 2 && m_filePath.at(1) == QLatin1Char(':')) -
192 return QFSFileEngine::currentPath(m_filePath.left(2)); -
193#endif -
194 return QString(QLatin1Char('.'));
executed: return QString(QLatin1Char('.'));
Execution Count:206
206
195 } -
196 if (m_lastSeparator == 0)
evaluated: m_lastSeparator == 0
TRUEFALSE
yes
Evaluation Count:944
yes
Evaluation Count:9389
944-9389
197 return QString(QLatin1Char('/'));
executed: return QString(QLatin1Char('/'));
Execution Count:944
944
198#if defined(Q_OS_WIN) -
199 if (m_lastSeparator == 2 && m_filePath.at(1) == QLatin1Char(':')) -
200 return m_filePath.left(m_lastSeparator + 1); -
201#endif -
202 return m_filePath.left(m_lastSeparator);
executed: return m_filePath.left(m_lastSeparator);
Execution Count:9389
9389
203} -
204 -
205QString QFileSystemEntry::baseName() const -
206{ -
207 findFileNameSeparators();
executed (the execution status of this line is deduced): findFileNameSeparators();
-
208 int length = -1;
executed (the execution status of this line is deduced): int length = -1;
-
209 if (m_firstDotInFileName >= 0) {
evaluated: m_firstDotInFileName >= 0
TRUEFALSE
yes
Evaluation Count:1754
yes
Evaluation Count:233
233-1754
210 length = m_firstDotInFileName;
executed (the execution status of this line is deduced): length = m_firstDotInFileName;
-
211 if (m_lastSeparator != -1) // avoid off by one
evaluated: m_lastSeparator != -1
TRUEFALSE
yes
Evaluation Count:1595
yes
Evaluation Count:159
159-1595
212 length--;
executed: length--;
Execution Count:1595
1595
213 }
executed: }
Execution Count:1754
1754
214#if defined(Q_OS_WIN) -
215 if (m_lastSeparator == -1 && m_filePath.length() >= 2 && m_filePath.at(1) == QLatin1Char(':')) -
216 return m_filePath.mid(2, length - 2); -
217#endif -
218 return m_filePath.mid(m_lastSeparator + 1, length);
executed: return m_filePath.mid(m_lastSeparator + 1, length);
Execution Count:1987
1987
219} -
220 -
221QString QFileSystemEntry::completeBaseName() const -
222{ -
223 findFileNameSeparators();
executed (the execution status of this line is deduced): findFileNameSeparators();
-
224 int length = -1;
executed (the execution status of this line is deduced): int length = -1;
-
225 if (m_firstDotInFileName >= 0) {
evaluated: m_firstDotInFileName >= 0
TRUEFALSE
yes
Evaluation Count:20
yes
Evaluation Count:11
11-20
226 length = m_firstDotInFileName + m_lastDotInFileName;
executed (the execution status of this line is deduced): length = m_firstDotInFileName + m_lastDotInFileName;
-
227 if (m_lastSeparator != -1) // avoid off by one
evaluated: m_lastSeparator != -1
TRUEFALSE
yes
Evaluation Count:16
yes
Evaluation Count:4
4-16
228 length--;
executed: length--;
Execution Count:16
16
229 }
executed: }
Execution Count:20
20
230#if defined(Q_OS_WIN) -
231 if (m_lastSeparator == -1 && m_filePath.length() >= 2 && m_filePath.at(1) == QLatin1Char(':')) -
232 return m_filePath.mid(2, length - 2); -
233#endif -
234 return m_filePath.mid(m_lastSeparator + 1, length);
executed: return m_filePath.mid(m_lastSeparator + 1, length);
Execution Count:31
31
235} -
236 -
237QString QFileSystemEntry::suffix() const -
238{ -
239 findFileNameSeparators();
executed (the execution status of this line is deduced): findFileNameSeparators();
-
240 -
241 if (m_lastDotInFileName == -1)
evaluated: m_lastDotInFileName == -1
TRUEFALSE
yes
Evaluation Count:13021
yes
Evaluation Count:29859
13021-29859
242 return QString();
executed: return QString();
Execution Count:13021
13021
243 -
244 return m_filePath.mid(qMax((qint16)0, m_lastSeparator) + m_firstDotInFileName + m_lastDotInFileName + 1);
executed: return m_filePath.mid(qMax((qint16)0, m_lastSeparator) + m_firstDotInFileName + m_lastDotInFileName + 1);
Execution Count:29859
29859
245} -
246 -
247QString QFileSystemEntry::completeSuffix() const -
248{ -
249 findFileNameSeparators();
executed (the execution status of this line is deduced): findFileNameSeparators();
-
250 if (m_firstDotInFileName == -1)
evaluated: m_firstDotInFileName == -1
TRUEFALSE
yes
Evaluation Count:18
yes
Evaluation Count:1742
18-1742
251 return QString();
executed: return QString();
Execution Count:18
18
252 -
253 return m_filePath.mid(qMax((qint16)0, m_lastSeparator) + m_firstDotInFileName + 1);
executed: return m_filePath.mid(qMax((qint16)0, m_lastSeparator) + m_firstDotInFileName + 1);
Execution Count:1742
1742
254} -
255 -
256#if defined(Q_OS_WIN) -
257bool QFileSystemEntry::isRelative() const -
258{ -
259 resolveFilePath(); -
260 return (m_filePath.isEmpty() || (!m_filePath.isEmpty() && (m_filePath[0].unicode() != '/') -
261 && (!(m_filePath.length() >= 2 && m_filePath[1].unicode() == ':')))); -
262} -
263 -
264bool QFileSystemEntry::isAbsolute() const -
265{ -
266 resolveFilePath(); -
267 return (!m_filePath.isEmpty() && ((m_filePath.length() >= 3 -
268 && (m_filePath[0].isLetter() && m_filePath[1].unicode() == ':' && m_filePath[2].unicode() == '/')) -
269 || (m_filePath.length() >= 2 && (m_filePath.at(0) == QLatin1Char('/') && m_filePath.at(1) == QLatin1Char('/'))) -
270 )); -
271} -
272#else -
273bool QFileSystemEntry::isRelative() const -
274{ -
275 return !isAbsolute();
executed: return !isAbsolute();
Execution Count:14093
14093
276} -
277 -
278bool QFileSystemEntry::isAbsolute() const -
279{ -
280 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
281 return (!m_filePath.isEmpty() && (m_filePath[0].unicode() == '/'));
executed: return (!m_filePath.isEmpty() && (m_filePath[0].unicode() == '/'));
Execution Count:24154
24154
282} -
283#endif -
284 -
285#if defined(Q_OS_WIN) -
286bool QFileSystemEntry::isDriveRoot() const -
287{ -
288 resolveFilePath(); -
289 return (m_filePath.length() == 3 -
290 && m_filePath.at(0).isLetter() && m_filePath.at(1) == QLatin1Char(':') -
291 && m_filePath.at(2) == QLatin1Char('/')); -
292} -
293#endif -
294 -
295bool QFileSystemEntry::isRoot() const -
296{ -
297 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
298 if (m_filePath == QLatin1String("/")
evaluated: m_filePath == QLatin1String("/")
TRUEFALSE
yes
Evaluation Count:152
yes
Evaluation Count:62674
152-62674
299#if defined(Q_OS_WIN) -
300 || isDriveRoot() -
301 || isUncRoot(m_filePath) -
302#endif -
303 ) -
304 return true;
executed: return true;
Execution Count:152
152
305 -
306 return false;
executed: return false;
Execution Count:62674
62674
307} -
308 -
309bool QFileSystemEntry::isEmpty() const -
310{ -
311 return m_filePath.isEmpty() && m_nativeFilePath.isEmpty();
executed: return m_filePath.isEmpty() && m_nativeFilePath.isEmpty();
Execution Count:40834
40834
312} -
313 -
314// private methods -
315 -
316void QFileSystemEntry::findLastSeparator() const -
317{ -
318 if (m_lastSeparator == -2) {
evaluated: m_lastSeparator == -2
TRUEFALSE
yes
Evaluation Count:176558
yes
Evaluation Count:99242
99242-176558
319 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
320 m_lastSeparator = -1;
executed (the execution status of this line is deduced): m_lastSeparator = -1;
-
321 for (int i = m_filePath.size() - 1; i >= 0; --i) {
evaluated: i >= 0
TRUEFALSE
yes
Evaluation Count:2706043
yes
Evaluation Count:336
336-2706043
322 if (m_filePath[i].unicode() == '/') {
evaluated: m_filePath[i].unicode() == '/'
TRUEFALSE
yes
Evaluation Count:176109
yes
Evaluation Count:2530127
176109-2530127
323 m_lastSeparator = i;
executed (the execution status of this line is deduced): m_lastSeparator = i;
-
324 break;
executed: break;
Execution Count:176112
176112
325 } -
326 }
executed: }
Execution Count:2530169
2530169
327 }
executed: }
Execution Count:176454
176454
328}
executed: }
Execution Count:275666
275666
329 -
330void QFileSystemEntry::findFileNameSeparators() const -
331{ -
332 if (m_firstDotInFileName == -2) {
evaluated: m_firstDotInFileName == -2
TRUEFALSE
yes
Evaluation Count:32110
yes
Evaluation Count:14548
14548-32110
333 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
334 int firstDotInFileName = -1;
executed (the execution status of this line is deduced): int firstDotInFileName = -1;
-
335 int lastDotInFileName = -1;
executed (the execution status of this line is deduced): int lastDotInFileName = -1;
-
336 int lastSeparator = m_lastSeparator;
executed (the execution status of this line is deduced): int lastSeparator = m_lastSeparator;
-
337 -
338 int stop;
executed (the execution status of this line is deduced): int stop;
-
339 if (lastSeparator < 0) {
evaluated: lastSeparator < 0
TRUEFALSE
yes
Evaluation Count:6718
yes
Evaluation Count:25392
6718-25392
340 lastSeparator = -1;
executed (the execution status of this line is deduced): lastSeparator = -1;
-
341 stop = 0;
executed (the execution status of this line is deduced): stop = 0;
-
342 } else {
executed: }
Execution Count:6718
6718
343 stop = lastSeparator;
executed (the execution status of this line is deduced): stop = lastSeparator;
-
344 }
executed: }
Execution Count:25392
25392
345 -
346 int i = m_filePath.size() - 1;
executed (the execution status of this line is deduced): int i = m_filePath.size() - 1;
-
347 for (; i >= stop; --i) {
evaluated: i >= stop
TRUEFALSE
yes
Evaluation Count:195269
yes
Evaluation Count:314
314-195269
348 if (m_filePath[i].unicode() == '.') {
evaluated: m_filePath[i].unicode() == '.'
TRUEFALSE
yes
Evaluation Count:20025
yes
Evaluation Count:175244
20025-175244
349 firstDotInFileName = lastDotInFileName = i;
executed (the execution status of this line is deduced): firstDotInFileName = lastDotInFileName = i;
-
350 break;
executed: break;
Execution Count:20025
20025
351 } else if (m_filePath[i].unicode() == '/') {
evaluated: m_filePath[i].unicode() == '/'
TRUEFALSE
yes
Evaluation Count:11771
yes
Evaluation Count:163473
11771-163473
352 lastSeparator = i;
executed (the execution status of this line is deduced): lastSeparator = i;
-
353 break;
executed: break;
Execution Count:11771
11771
354 } -
355 } -
356 -
357 if (lastSeparator != i) {
evaluated: lastSeparator != i
TRUEFALSE
yes
Evaluation Count:20025
yes
Evaluation Count:12085
12085-20025
358 for (--i; i >= stop; --i) {
evaluated: i >= stop
TRUEFALSE
yes
Evaluation Count:371720
yes
Evaluation Count:260
260-371720
359 if (m_filePath[i].unicode() == '.')
evaluated: m_filePath[i].unicode() == '.'
TRUEFALSE
yes
Evaluation Count:7789
yes
Evaluation Count:363931
7789-363931
360 firstDotInFileName = i;
executed: firstDotInFileName = i;
Execution Count:7789
7789
361 else if (m_filePath[i].unicode() == '/') {
evaluated: m_filePath[i].unicode() == '/'
TRUEFALSE
yes
Evaluation Count:19765
yes
Evaluation Count:344166
19765-344166
362 lastSeparator = i;
executed (the execution status of this line is deduced): lastSeparator = i;
-
363 break;
executed: break;
Execution Count:19765
19765
364 } -
365 } -
366 }
executed: }
Execution Count:20025
20025
367 m_lastSeparator = lastSeparator;
executed (the execution status of this line is deduced): m_lastSeparator = lastSeparator;
-
368 m_firstDotInFileName = firstDotInFileName == -1 ? -1 : firstDotInFileName - qMax(0, lastSeparator);
evaluated: firstDotInFileName == -1
TRUEFALSE
yes
Evaluation Count:12085
yes
Evaluation Count:20025
12085-20025
369 if (lastDotInFileName == -1)
evaluated: lastDotInFileName == -1
TRUEFALSE
yes
Evaluation Count:12085
yes
Evaluation Count:20025
12085-20025
370 m_lastDotInFileName = -1;
executed: m_lastDotInFileName = -1;
Execution Count:12085
12085
371 else if (firstDotInFileName == lastDotInFileName)
evaluated: firstDotInFileName == lastDotInFileName
TRUEFALSE
yes
Evaluation Count:16047
yes
Evaluation Count:3978
3978-16047
372 m_lastDotInFileName = 0;
executed: m_lastDotInFileName = 0;
Execution Count:16047
16047
373 else -
374 m_lastDotInFileName = lastDotInFileName - firstDotInFileName;
executed: m_lastDotInFileName = lastDotInFileName - firstDotInFileName;
Execution Count:3978
3978
375 } -
376}
executed: }
Execution Count:46658
46658
377 -
378bool QFileSystemEntry::isClean() const -
379{ -
380 resolveFilePath();
executed (the execution status of this line is deduced): resolveFilePath();
-
381 int dots = 0;
executed (the execution status of this line is deduced): int dots = 0;
-
382 bool dotok = true; // checking for ".." or "." starts to relative paths
executed (the execution status of this line is deduced): bool dotok = true;
-
383 bool slashok = true;
executed (the execution status of this line is deduced): bool slashok = true;
-
384 for (QString::const_iterator iter = m_filePath.constBegin(); iter != m_filePath.constEnd(); iter++) {
evaluated: iter != m_filePath.constEnd()
TRUEFALSE
yes
Evaluation Count:604929
yes
Evaluation Count:14600
14600-604929
385 if (*iter == QLatin1Char('/')) {
evaluated: *iter == QLatin1Char('/')
TRUEFALSE
yes
Evaluation Count:70859
yes
Evaluation Count:534072
70859-534072
386 if (dots == 1 || dots == 2)
evaluated: dots == 1
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:70857
evaluated: dots == 2
TRUEFALSE
yes
Evaluation Count:153
yes
Evaluation Count:70704
2-70857
387 return false; // path contains "./" or "../"
executed: return false;
Execution Count:155
155
388 if (!slashok)
evaluated: !slashok
TRUEFALSE
yes
Evaluation Count:17
yes
Evaluation Count:70687
17-70687
389 return false; // path contains "//"
executed: return false;
Execution Count:17
17
390 dots = 0;
executed (the execution status of this line is deduced): dots = 0;
-
391 dotok = true;
executed (the execution status of this line is deduced): dotok = true;
-
392 slashok = false;
executed (the execution status of this line is deduced): slashok = false;
-
393 } else if (dotok) {
executed: }
Execution Count:70687
evaluated: dotok
TRUEFALSE
yes
Evaluation Count:71588
yes
Evaluation Count:462484
70687-462484
394 slashok = true;
executed (the execution status of this line is deduced): slashok = true;
-
395 if (*iter == QLatin1Char('.')) {
evaluated: *iter == QLatin1Char('.')
TRUEFALSE
yes
Evaluation Count:1654
yes
Evaluation Count:69934
1654-69934
396 dots++;
executed (the execution status of this line is deduced): dots++;
-
397 if (dots > 2)
evaluated: dots > 2
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:1653
1-1653
398 dotok = false;
executed: dotok = false;
Execution Count:1
1
399 } else {
executed: }
Execution Count:1654
1654
400 //path element contains a character other than '.', it's clean -
401 dots = 0;
executed (the execution status of this line is deduced): dots = 0;
-
402 dotok = false;
executed (the execution status of this line is deduced): dotok = false;
-
403 }
executed: }
Execution Count:69934
69934
404 } -
405 } -
406 return (dots != 1 && dots != 2); // clean if path doesn't end in . or ..
executed: return (dots != 1 && dots != 2);
Execution Count:14600
14600
407} -
408 -
409QT_END_NAMESPACE -
410 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial