io/qfilesystemengine.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 "qfilesystemengine_p.h" -
43#include <QtCore/qdir.h> -
44#include <QtCore/qset.h> -
45#include <QtCore/qstringbuilder.h> -
46#include <QtCore/private/qabstractfileengine_p.h> -
47#ifdef QT_BUILD_CORE_LIB -
48#include <QtCore/private/qresource_p.h> -
49#endif -
50 -
51QT_BEGIN_NAMESPACE -
52 -
53/*! -
54 \internal -
55 -
56 Returns the canonicalized form of \a path (i.e., with all symlinks -
57 resolved, and all redundant path elements removed. -
58*/ -
59QString QFileSystemEngine::slowCanonicalized(const QString &path) -
60{ -
61 if (path.isEmpty())
never evaluated: path.isEmpty()
0
62 return path;
never executed: return path;
0
63 -
64 QFileInfo fi;
never executed (the execution status of this line is deduced): QFileInfo fi;
-
65 const QChar slash(QLatin1Char('/'));
never executed (the execution status of this line is deduced): const QChar slash(QLatin1Char('/'));
-
66 QString tmpPath = path;
never executed (the execution status of this line is deduced): QString tmpPath = path;
-
67 int separatorPos = 0;
never executed (the execution status of this line is deduced): int separatorPos = 0;
-
68 QSet<QString> nonSymlinks;
never executed (the execution status of this line is deduced): QSet<QString> nonSymlinks;
-
69 QSet<QString> known;
never executed (the execution status of this line is deduced): QSet<QString> known;
-
70 -
71 known.insert(path);
never executed (the execution status of this line is deduced): known.insert(path);
-
72 do { -
73#ifdef Q_OS_WIN -
74 if (separatorPos == 0) { -
75 if (tmpPath.size() >= 2 && tmpPath.at(0) == slash && tmpPath.at(1) == slash) { -
76 // UNC, skip past the first two elements -
77 separatorPos = tmpPath.indexOf(slash, 2); -
78 } else if (tmpPath.size() >= 3 && tmpPath.at(1) == QLatin1Char(':') && tmpPath.at(2) == slash) { -
79 // volume root, skip since it can not be a symlink -
80 separatorPos = 2; -
81 } -
82 } -
83 if (separatorPos != -1) -
84#endif -
85 separatorPos = tmpPath.indexOf(slash, separatorPos + 1);
never executed (the execution status of this line is deduced): separatorPos = tmpPath.indexOf(slash, separatorPos + 1);
-
86 QString prefix = separatorPos == -1 ? tmpPath : tmpPath.left(separatorPos);
never evaluated: separatorPos == -1
0
87 if (!nonSymlinks.contains(prefix)) {
never evaluated: !nonSymlinks.contains(prefix)
0
88 fi.setFile(prefix);
never executed (the execution status of this line is deduced): fi.setFile(prefix);
-
89 if (fi.isSymLink()) {
never evaluated: fi.isSymLink()
0
90 QString target = fi.symLinkTarget();
never executed (the execution status of this line is deduced): QString target = fi.symLinkTarget();
-
91 if(QFileInfo(target).isRelative())
never evaluated: QFileInfo(target).isRelative()
0
92 target = fi.absolutePath() + slash + target;
never executed: target = fi.absolutePath() + slash + target;
0
93 if (separatorPos != -1) {
never evaluated: separatorPos != -1
0
94 if (fi.isDir() && !target.endsWith(slash))
never evaluated: fi.isDir()
never evaluated: !target.endsWith(slash)
0
95 target.append(slash);
never executed: target.append(slash);
0
96 target.append(tmpPath.mid(separatorPos));
never executed (the execution status of this line is deduced): target.append(tmpPath.mid(separatorPos));
-
97 }
never executed: }
0
98 tmpPath = QDir::cleanPath(target);
never executed (the execution status of this line is deduced): tmpPath = QDir::cleanPath(target);
-
99 separatorPos = 0;
never executed (the execution status of this line is deduced): separatorPos = 0;
-
100 -
101 if (known.contains(tmpPath))
never evaluated: known.contains(tmpPath)
0
102 return QString();
never executed: return QString();
0
103 known.insert(tmpPath);
never executed (the execution status of this line is deduced): known.insert(tmpPath);
-
104 } else {
never executed: }
0
105 nonSymlinks.insert(prefix);
never executed (the execution status of this line is deduced): nonSymlinks.insert(prefix);
-
106 }
never executed: }
0
107 } -
108 } while (separatorPos != -1);
never executed: }
never evaluated: separatorPos != -1
0
109 -
110 return QDir::cleanPath(tmpPath);
never executed: return QDir::cleanPath(tmpPath);
0
111} -
112 -
113static inline bool _q_checkEntry(QFileSystemEntry &entry, QFileSystemMetaData &data, bool resolvingEntry) -
114{ -
115 if (resolvingEntry) {
evaluated: resolvingEntry
TRUEFALSE
yes
Evaluation Count:46
yes
Evaluation Count:155179
46-155179
116 if (!QFileSystemEngine::fillMetaData(entry, data, QFileSystemMetaData::ExistsAttribute)
partially evaluated: !QFileSystemEngine::fillMetaData(entry, data, QFileSystemMetaData::ExistsAttribute)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:46
0-46
117 || !data.exists()) {
partially evaluated: !data.exists()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:46
0-46
118 data.clear();
never executed (the execution status of this line is deduced): data.clear();
-
119 return false;
never executed: return false;
0
120 } -
121 }
executed: }
Execution Count:46
46
122 -
123 return true;
executed: return true;
Execution Count:155224
155224
124} -
125 -
126static inline bool _q_checkEntry(QAbstractFileEngine *&engine, bool resolvingEntry) -
127{ -
128 if (resolvingEntry) {
evaluated: resolvingEntry
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:8254
1-8254
129 if (!(engine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::ExistsFlag)) {
partially evaluated: !(engine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::ExistsFlag)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
130 delete engine;
never executed (the execution status of this line is deduced): delete engine;
-
131 engine = 0;
never executed (the execution status of this line is deduced): engine = 0;
-
132 return false;
never executed: return false;
0
133 } -
134 }
executed: }
Execution Count:1
1
135 -
136 return true;
executed: return true;
Execution Count:8255
8255
137} -
138 -
139static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &entry, QFileSystemMetaData &data, -
140 QAbstractFileEngine *&engine, bool resolvingEntry = false) -
141{ -
142 QString const &filePath = entry.filePath();
executed (the execution status of this line is deduced): QString const &filePath = entry.filePath();
-
143 if ((engine = qt_custom_file_engine_handler_create(filePath)))
partially evaluated: (engine = qt_custom_file_engine_handler_create(filePath))
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:163556
0-163556
144 return _q_checkEntry(engine, resolvingEntry);
never executed: return _q_checkEntry(engine, resolvingEntry);
0
145 -
146#if defined(QT_BUILD_CORE_LIB) -
147 for (int prefixSeparator = 0; prefixSeparator < filePath.size(); ++prefixSeparator) {
evaluated: prefixSeparator < filePath.size()
TRUEFALSE
yes
Evaluation Count:451472
yes
Evaluation Count:8758
8758-451472
148 QChar const ch = filePath[prefixSeparator];
executed (the execution status of this line is deduced): QChar const ch = filePath[prefixSeparator];
-
149 if (ch == QLatin1Char('/'))
evaluated: ch == QLatin1Char('/')
TRUEFALSE
yes
Evaluation Count:146464
yes
Evaluation Count:305006
146464-305006
150 break;
executed: break;
Execution Count:146465
146465
151 -
152 if (ch == QLatin1Char(':')) {
evaluated: ch == QLatin1Char(':')
TRUEFALSE
yes
Evaluation Count:8329
yes
Evaluation Count:296677
8329-296677
153 if (prefixSeparator == 0) {
evaluated: prefixSeparator == 0
TRUEFALSE
yes
Evaluation Count:8255
yes
Evaluation Count:74
74-8255
154 engine = new QResourceFileEngine(filePath);
executed (the execution status of this line is deduced): engine = new QResourceFileEngine(filePath);
-
155 return _q_checkEntry(engine, resolvingEntry);
executed: return _q_checkEntry(engine, resolvingEntry);
Execution Count:8255
8255
156 } -
157 -
158 if (prefixSeparator == 1)
evaluated: prefixSeparator == 1
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:72
2-72
159 break;
executed: break;
Execution Count:2
2
160 -
161 const QStringList &paths = QDir::searchPaths(filePath.left(prefixSeparator));
executed (the execution status of this line is deduced): const QStringList &paths = QDir::searchPaths(filePath.left(prefixSeparator));
-
162 for (int i = 0; i < paths.count(); i++) {
evaluated: i < paths.count()
TRUEFALSE
yes
Evaluation Count:47
yes
Evaluation Count:25
25-47
163 entry = QFileSystemEntry(QDir::cleanPath(paths.at(i) % QLatin1Char('/') % filePath.mid(prefixSeparator + 1)));
executed (the execution status of this line is deduced): entry = QFileSystemEntry(QDir::cleanPath(paths.at(i) % QLatin1Char('/') % filePath.mid(prefixSeparator + 1)));
-
164 // Recurse! -
165 if (_q_resolveEntryAndCreateLegacyEngine_recursive(entry, data, engine, true))
partially evaluated: _q_resolveEntryAndCreateLegacyEngine_recursive(entry, data, engine, true)
TRUEFALSE
yes
Evaluation Count:47
no
Evaluation Count:0
0-47
166 return true;
executed: return true;
Execution Count:47
47
167 }
never executed: }
0
168 -
169 // entry may have been clobbered at this point. -
170 return false;
executed: return false;
Execution Count:25
25
171 } -
172 -
173 // There's no need to fully validate the prefix here. Consulting the -
174 // unicode tables could be expensive and validation is already -
175 // performed in QDir::setSearchPaths. -
176 // -
177 // if (!ch.isLetterOrNumber()) -
178 // break; -
179 }
executed: }
Execution Count:296677
296677
180#endif // defined(QT_BUILD_CORE_LIB) -
181 -
182 return _q_checkEntry(entry, data, resolvingEntry);
executed: return _q_checkEntry(entry, data, resolvingEntry);
Execution Count:155225
155225
183} -
184 -
185/*! -
186 \internal -
187 -
188 Resolves the \a entry (see QDir::searchPaths) and returns an engine for -
189 it, but never a QFSFileEngine. -
190 -
191 Returns a file engine that can be used to access the entry. Returns 0 if -
192 QFileSystemEngine API should be used to query and interact with the file -
193 system object. -
194*/ -
195QAbstractFileEngine *QFileSystemEngine::resolveEntryAndCreateLegacyEngine( -
196 QFileSystemEntry &entry, QFileSystemMetaData &data) { -
197 QFileSystemEntry copy = entry;
executed (the execution status of this line is deduced): QFileSystemEntry copy = entry;
-
198 QAbstractFileEngine *engine = 0;
executed (the execution status of this line is deduced): QAbstractFileEngine *engine = 0;
-
199 -
200 if (_q_resolveEntryAndCreateLegacyEngine_recursive(copy, data, engine))
evaluated: _q_resolveEntryAndCreateLegacyEngine_recursive(copy, data, engine)
TRUEFALSE
yes
Evaluation Count:163484
yes
Evaluation Count:25
25-163484
201 // Reset entry to resolved copy. -
202 entry = copy;
executed: entry = copy;
Execution Count:163489
163489
203 else -
204 data.clear();
executed: data.clear();
Execution Count:25
25
205 -
206 return engine;
executed: return engine;
Execution Count:163509
163509
207} -
208 -
209//these unix functions are in this file, because they are shared by symbian port -
210//for open C file handles. -
211#ifdef Q_OS_UNIX -
212//static -
213bool QFileSystemEngine::fillMetaData(int fd, QFileSystemMetaData &data) -
214{ -
215 data.entryFlags &= ~QFileSystemMetaData::PosixStatFlags;
executed (the execution status of this line is deduced): data.entryFlags &= ~QFileSystemMetaData::PosixStatFlags;
-
216 data.knownFlagsMask |= QFileSystemMetaData::PosixStatFlags;
executed (the execution status of this line is deduced): data.knownFlagsMask |= QFileSystemMetaData::PosixStatFlags;
-
217 -
218 QT_STATBUF statBuffer;
executed (the execution status of this line is deduced): struct stat64 statBuffer;
-
219 if (QT_FSTAT(fd, &statBuffer) == 0) {
partially evaluated: ::fstat64(fd, &statBuffer) == 0
TRUEFALSE
yes
Evaluation Count:148162
no
Evaluation Count:0
0-148162
220 data.fillFromStatBuf(statBuffer);
executed (the execution status of this line is deduced): data.fillFromStatBuf(statBuffer);
-
221 return true;
executed: return true;
Execution Count:148163
148163
222 } -
223 -
224 return false;
never executed: return false;
0
225} -
226 -
227#if defined(Q_OS_QNX) -
228static void fillStat64fromStat32(struct stat64 *statBuf64, const struct stat &statBuf32) -
229{ -
230 statBuf64->st_mode = statBuf32.st_mode; -
231 statBuf64->st_size = statBuf32.st_size; -
232 statBuf64->st_ctime = statBuf32.st_ctime; -
233 statBuf64->st_mtime = statBuf32.st_mtime; -
234 statBuf64->st_atime = statBuf32.st_atime; -
235 statBuf64->st_uid = statBuf32.st_uid; -
236 statBuf64->st_gid = statBuf32.st_gid; -
237} -
238#endif -
239 -
240void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer) -
241{ -
242 // Permissions -
243 if (statBuffer.st_mode & S_IRUSR)
evaluated: statBuffer.st_mode & 0400
TRUEFALSE
yes
Evaluation Count:200529
yes
Evaluation Count:22
22-200529
244 entryFlags |= QFileSystemMetaData::OwnerReadPermission;
executed: entryFlags |= QFileSystemMetaData::OwnerReadPermission;
Execution Count:200529
200529
245 if (statBuffer.st_mode & S_IWUSR)
evaluated: statBuffer.st_mode & 0200
TRUEFALSE
yes
Evaluation Count:200398
yes
Evaluation Count:153
153-200398
246 entryFlags |= QFileSystemMetaData::OwnerWritePermission;
executed: entryFlags |= QFileSystemMetaData::OwnerWritePermission;
Execution Count:200398
200398
247 if (statBuffer.st_mode & S_IXUSR)
evaluated: statBuffer.st_mode & 0100
TRUEFALSE
yes
Evaluation Count:14223
yes
Evaluation Count:186328
14223-186328
248 entryFlags |= QFileSystemMetaData::OwnerExecutePermission;
executed: entryFlags |= QFileSystemMetaData::OwnerExecutePermission;
Execution Count:14223
14223
249 -
250 if (statBuffer.st_mode & S_IRGRP)
evaluated: statBuffer.st_mode & (0400 >> 3)
TRUEFALSE
yes
Evaluation Count:196533
yes
Evaluation Count:4017
4017-196533
251 entryFlags |= QFileSystemMetaData::GroupReadPermission;
executed: entryFlags |= QFileSystemMetaData::GroupReadPermission;
Execution Count:196533
196533
252 if (statBuffer.st_mode & S_IWGRP)
evaluated: statBuffer.st_mode & (0200 >> 3)
TRUEFALSE
yes
Evaluation Count:691
yes
Evaluation Count:199859
691-199859
253 entryFlags |= QFileSystemMetaData::GroupWritePermission;
executed: entryFlags |= QFileSystemMetaData::GroupWritePermission;
Execution Count:692
692
254 if (statBuffer.st_mode & S_IXGRP)
evaluated: statBuffer.st_mode & (0100 >> 3)
TRUEFALSE
yes
Evaluation Count:12215
yes
Evaluation Count:188335
12215-188335
255 entryFlags |= QFileSystemMetaData::GroupExecutePermission;
executed: entryFlags |= QFileSystemMetaData::GroupExecutePermission;
Execution Count:12215
12215
256 -
257 if (statBuffer.st_mode & S_IROTH)
evaluated: statBuffer.st_mode & ((0400 >> 3) >> 3)
TRUEFALSE
yes
Evaluation Count:196485
yes
Evaluation Count:4065
4065-196485
258 entryFlags |= QFileSystemMetaData::OtherReadPermission;
executed: entryFlags |= QFileSystemMetaData::OtherReadPermission;
Execution Count:196485
196485
259 if (statBuffer.st_mode & S_IWOTH)
evaluated: statBuffer.st_mode & ((0200 >> 3) >> 3)
TRUEFALSE
yes
Evaluation Count:648
yes
Evaluation Count:199902
648-199902
260 entryFlags |= QFileSystemMetaData::OtherWritePermission;
executed: entryFlags |= QFileSystemMetaData::OtherWritePermission;
Execution Count:649
649
261 if (statBuffer.st_mode & S_IXOTH)
evaluated: statBuffer.st_mode & ((0100 >> 3) >> 3)
TRUEFALSE
yes
Evaluation Count:12215
yes
Evaluation Count:188335
12215-188335
262 entryFlags |= QFileSystemMetaData::OtherExecutePermission;
executed: entryFlags |= QFileSystemMetaData::OtherExecutePermission;
Execution Count:12215
12215
263 -
264 // Type -
265 if ((statBuffer.st_mode & S_IFMT) == S_IFREG)
evaluated: (statBuffer.st_mode & 0170000) == 0100000
TRUEFALSE
yes
Evaluation Count:187910
yes
Evaluation Count:12640
12640-187910
266 entryFlags |= QFileSystemMetaData::FileType;
executed: entryFlags |= QFileSystemMetaData::FileType;
Execution Count:187910
187910
267 else if ((statBuffer.st_mode & S_IFMT) == S_IFDIR)
evaluated: (statBuffer.st_mode & 0170000) == 0040000
TRUEFALSE
yes
Evaluation Count:12401
yes
Evaluation Count:240
240-12401
268 entryFlags |= QFileSystemMetaData::DirectoryType;
executed: entryFlags |= QFileSystemMetaData::DirectoryType;
Execution Count:12401
12401
269 else -
270 entryFlags |= QFileSystemMetaData::SequentialType;
executed: entryFlags |= QFileSystemMetaData::SequentialType;
Execution Count:240
240
271 -
272 // Attributes -
273 entryFlags |= QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): entryFlags |= QFileSystemMetaData::ExistsAttribute;
-
274 size_ = statBuffer.st_size;
executed (the execution status of this line is deduced): size_ = statBuffer.st_size;
-
275#if defined (Q_OS_MAC) && !defined(Q_OS_IOS) \ -
276 && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 -
277 if (statBuffer.st_flags & UF_HIDDEN) { -
278 entryFlags |= QFileSystemMetaData::HiddenAttribute; -
279 knownFlagsMask |= QFileSystemMetaData::HiddenAttribute; -
280 } -
281#endif -
282 -
283 // Times -
284 creationTime_ = statBuffer.st_ctime ? statBuffer.st_ctime : statBuffer.st_mtime;
evaluated: statBuffer.st_ctim.tv_sec
TRUEFALSE
yes
Evaluation Count:200549
yes
Evaluation Count:2
2-200549
285 modificationTime_ = statBuffer.st_mtime;
executed (the execution status of this line is deduced): modificationTime_ = statBuffer.st_mtim.tv_sec;
-
286 accessTime_ = statBuffer.st_atime;
executed (the execution status of this line is deduced): accessTime_ = statBuffer.st_atim.tv_sec;
-
287 userId_ = statBuffer.st_uid;
executed (the execution status of this line is deduced): userId_ = statBuffer.st_uid;
-
288 groupId_ = statBuffer.st_gid;
executed (the execution status of this line is deduced): groupId_ = statBuffer.st_gid;
-
289}
executed: }
Execution Count:200551
200551
290 -
291void QFileSystemMetaData::fillFromDirEnt(const QT_DIRENT &entry) -
292{ -
293#if defined(Q_OS_QNX) -
294 knownFlagsMask = 0; -
295 entryFlags = 0; -
296 for (dirent_extra *extra = _DEXTRA_FIRST(&entry); _DEXTRA_VALID(extra, &entry); -
297 extra = _DEXTRA_NEXT(extra)) { -
298 if (extra->d_type == _DTYPE_STAT || extra->d_type == _DTYPE_LSTAT) { -
299 -
300 const struct dirent_extra_stat * const extra_stat = -
301 reinterpret_cast<struct dirent_extra_stat *>(extra); -
302 -
303 // Remember whether this was a link or not, this saves an lstat() call later. -
304 if (extra->d_type == _DTYPE_LSTAT) { -
305 knownFlagsMask |= QFileSystemMetaData::LinkType; -
306 if (S_ISLNK(extra_stat->d_stat.st_mode)) -
307 entryFlags |= QFileSystemMetaData::LinkType; -
308 } -
309 -
310 // For symlinks, the extra type _DTYPE_LSTAT doesn't work for filling out the meta data, -
311 // as we need the stat() information there, not the lstat() information. -
312 // In this case, don't use the extra information. -
313 // Unfortunately, readdir() never seems to return extra info of type _DTYPE_STAT, so for -
314 // symlinks, we always incur the cost of an extra stat() call later. -
315 if (S_ISLNK(extra_stat->d_stat.st_mode) && extra->d_type == _DTYPE_LSTAT) -
316 continue; -
317 -
318#if defined(QT_USE_XOPEN_LFS_EXTENSIONS) && defined(QT_LARGEFILE_SUPPORT) -
319 // Even with large file support, d_stat is always of type struct stat, not struct stat64, -
320 // so it needs to be converted -
321 struct stat64 statBuf; -
322 fillStat64fromStat32(&statBuf, extra_stat->d_stat); -
323 fillFromStatBuf(statBuf); -
324#else -
325 fillFromStatBuf(extra_stat->d_stat); -
326#endif -
327 knownFlagsMask |= QFileSystemMetaData::PosixStatFlags; -
328 if (!S_ISLNK(extra_stat->d_stat.st_mode)) { -
329 knownFlagsMask |= QFileSystemMetaData::ExistsAttribute; -
330 entryFlags |= QFileSystemMetaData::ExistsAttribute; -
331 } -
332 } -
333 } -
334#elif defined(_DIRENT_HAVE_D_TYPE) || defined(Q_OS_BSD4) -
335 // BSD4 includes Mac OS X -
336 -
337 // ### This will clear all entry flags and knownFlagsMask -
338 switch (entry.d_type) -
339 { -
340 case DT_DIR: -
341 knownFlagsMask = QFileSystemMetaData::LinkType
executed (the execution status of this line is deduced): knownFlagsMask = QFileSystemMetaData::LinkType
-
342 | QFileSystemMetaData::FileType
executed (the execution status of this line is deduced): | QFileSystemMetaData::FileType
-
343 | QFileSystemMetaData::DirectoryType
executed (the execution status of this line is deduced): | QFileSystemMetaData::DirectoryType
-
344 | QFileSystemMetaData::SequentialType
executed (the execution status of this line is deduced): | QFileSystemMetaData::SequentialType
-
345 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
346 -
347 entryFlags = QFileSystemMetaData::DirectoryType
executed (the execution status of this line is deduced): entryFlags = QFileSystemMetaData::DirectoryType
-
348 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
349 -
350 break;
executed: break;
Execution Count:22787
22787
351 -
352 case DT_BLK: -
353 case DT_CHR: -
354 case DT_FIFO: -
355 case DT_SOCK: -
356 // ### System attribute -
357 knownFlagsMask = QFileSystemMetaData::LinkType
executed (the execution status of this line is deduced): knownFlagsMask = QFileSystemMetaData::LinkType
-
358 | QFileSystemMetaData::FileType
executed (the execution status of this line is deduced): | QFileSystemMetaData::FileType
-
359 | QFileSystemMetaData::DirectoryType
executed (the execution status of this line is deduced): | QFileSystemMetaData::DirectoryType
-
360 | QFileSystemMetaData::BundleType
executed (the execution status of this line is deduced): | QFileSystemMetaData::BundleType
-
361 | QFileSystemMetaData::AliasType
executed (the execution status of this line is deduced): | QFileSystemMetaData::AliasType
-
362 | QFileSystemMetaData::SequentialType
executed (the execution status of this line is deduced): | QFileSystemMetaData::SequentialType
-
363 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
364 -
365 entryFlags = QFileSystemMetaData::SequentialType
executed (the execution status of this line is deduced): entryFlags = QFileSystemMetaData::SequentialType
-
366 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
367 -
368 break;
executed: break;
Execution Count:160
160
369 -
370 case DT_LNK: -
371 knownFlagsMask = QFileSystemMetaData::LinkType;
executed (the execution status of this line is deduced): knownFlagsMask = QFileSystemMetaData::LinkType;
-
372 entryFlags = QFileSystemMetaData::LinkType;
executed (the execution status of this line is deduced): entryFlags = QFileSystemMetaData::LinkType;
-
373 break;
executed: break;
Execution Count:1993
1993
374 -
375 case DT_REG: -
376 knownFlagsMask = QFileSystemMetaData::LinkType
executed (the execution status of this line is deduced): knownFlagsMask = QFileSystemMetaData::LinkType
-
377 | QFileSystemMetaData::FileType
executed (the execution status of this line is deduced): | QFileSystemMetaData::FileType
-
378 | QFileSystemMetaData::DirectoryType
executed (the execution status of this line is deduced): | QFileSystemMetaData::DirectoryType
-
379 | QFileSystemMetaData::BundleType
executed (the execution status of this line is deduced): | QFileSystemMetaData::BundleType
-
380 | QFileSystemMetaData::SequentialType
executed (the execution status of this line is deduced): | QFileSystemMetaData::SequentialType
-
381 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
382 -
383 entryFlags = QFileSystemMetaData::FileType
executed (the execution status of this line is deduced): entryFlags = QFileSystemMetaData::FileType
-
384 | QFileSystemMetaData::ExistsAttribute;
executed (the execution status of this line is deduced): | QFileSystemMetaData::ExistsAttribute;
-
385 -
386 break;
executed: break;
Execution Count:61884
61884
387 -
388 case DT_UNKNOWN: -
389 default: -
390 clear();
never executed (the execution status of this line is deduced): clear();
-
391 }
never executed: }
0
392#else -
393 Q_UNUSED(entry) -
394#endif -
395}
executed: }
Execution Count:86823
86823
396 -
397#endif -
398 -
399//static -
400QString QFileSystemEngine::resolveUserName(const QFileSystemEntry &entry, QFileSystemMetaData &metaData) -
401{ -
402#if defined(Q_OS_WIN) -
403 Q_UNUSED(metaData); -
404 return QFileSystemEngine::owner(entry, QAbstractFileEngine::OwnerUser); -
405#else //(Q_OS_UNIX) -
406 if (!metaData.hasFlags(QFileSystemMetaData::UserId))
never evaluated: !metaData.hasFlags(QFileSystemMetaData::UserId)
0
407 QFileSystemEngine::fillMetaData(entry, metaData, QFileSystemMetaData::UserId);
never executed: QFileSystemEngine::fillMetaData(entry, metaData, QFileSystemMetaData::UserId);
0
408 return resolveUserName(metaData.userId());
never executed: return resolveUserName(metaData.userId());
0
409#endif -
410} -
411 -
412//static -
413QString QFileSystemEngine::resolveGroupName(const QFileSystemEntry &entry, QFileSystemMetaData &metaData) -
414{ -
415#if defined(Q_OS_WIN) -
416 Q_UNUSED(metaData); -
417 return QFileSystemEngine::owner(entry, QAbstractFileEngine::OwnerGroup); -
418#else //(Q_OS_UNIX) -
419 if (!metaData.hasFlags(QFileSystemMetaData::GroupId))
never evaluated: !metaData.hasFlags(QFileSystemMetaData::GroupId)
0
420 QFileSystemEngine::fillMetaData(entry, metaData, QFileSystemMetaData::GroupId);
never executed: QFileSystemEngine::fillMetaData(entry, metaData, QFileSystemMetaData::GroupId);
0
421 return resolveGroupName(metaData.groupId());
never executed: return resolveGroupName(metaData.groupId());
0
422#endif -
423} -
424 -
425QT_END_NAMESPACE -
426 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial