io/qstandardpaths_unix.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 "qstandardpaths.h" -
43#include <qdir.h> -
44#include <qfile.h> -
45#include <qhash.h> -
46#include <qtextstream.h> -
47#include <private/qfilesystemengine_p.h> -
48#include <errno.h> -
49#include <stdlib.h> -
50 -
51#ifndef QT_BOOTSTRAPPED -
52#include <qcoreapplication.h> -
53#endif -
54 -
55#ifndef QT_NO_STANDARDPATHS -
56 -
57QT_BEGIN_NAMESPACE -
58 -
59static void appendOrganizationAndApp(QString &path) -
60{ -
61#ifndef QT_BOOTSTRAPPED -
62 const QString org = QCoreApplication::organizationName();
executed (the execution status of this line is deduced): const QString org = QCoreApplication::organizationName();
-
63 if (!org.isEmpty())
evaluated: !org.isEmpty()
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:7
7-8
64 path += QLatin1Char('/') + org;
executed: path += QLatin1Char('/') + org;
Execution Count:8
8
65 const QString appName = QCoreApplication::applicationName();
executed (the execution status of this line is deduced): const QString appName = QCoreApplication::applicationName();
-
66 if (!appName.isEmpty())
partially evaluated: !appName.isEmpty()
TRUEFALSE
yes
Evaluation Count:15
no
Evaluation Count:0
0-15
67 path += QLatin1Char('/') + appName;
executed: path += QLatin1Char('/') + appName;
Execution Count:15
15
68#else -
69 Q_UNUSED(path); -
70#endif -
71}
executed: }
Execution Count:15
15
72 -
73QString QStandardPaths::writableLocation(StandardLocation type) -
74{ -
75 switch (type) { -
76 case HomeLocation: -
77 return QDir::homePath();
executed: return QDir::homePath();
Execution Count:2
2
78 case TempLocation: -
79 return QDir::tempPath();
executed: return QDir::tempPath();
Execution Count:2
2
80 case CacheLocation: -
81 case GenericCacheLocation: -
82 { -
83 // http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html -
84 QString xdgCacheHome = QFile::decodeName(qgetenv("XDG_CACHE_HOME"));
executed (the execution status of this line is deduced): QString xdgCacheHome = QFile::decodeName(qgetenv("XDG_CACHE_HOME"));
-
85 if (isTestModeEnabled())
evaluated: isTestModeEnabled()
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:4
4
86 xdgCacheHome = QDir::homePath() + QLatin1String("/.qttest/cache");
executed: xdgCacheHome = QDir::homePath() + QLatin1String("/.qttest/cache");
Execution Count:4
4
87 if (xdgCacheHome.isEmpty())
evaluated: xdgCacheHome.isEmpty()
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:4
4
88 xdgCacheHome = QDir::homePath() + QLatin1String("/.cache");
executed: xdgCacheHome = QDir::homePath() + QLatin1String("/.cache");
Execution Count:4
4
89 if (type == QStandardPaths::CacheLocation)
evaluated: type == QStandardPaths::CacheLocation
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:5
3-5
90 appendOrganizationAndApp(xdgCacheHome);
executed: appendOrganizationAndApp(xdgCacheHome);
Execution Count:3
3
91 return xdgCacheHome;
executed: return xdgCacheHome;
Execution Count:8
8
92 } -
93 case DataLocation: -
94 case GenericDataLocation: -
95 { -
96 QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME"));
executed (the execution status of this line is deduced): QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME"));
-
97 if (isTestModeEnabled())
evaluated: isTestModeEnabled()
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:81
4-81
98 xdgDataHome = QDir::homePath() + QLatin1String("/.qttest/share");
executed: xdgDataHome = QDir::homePath() + QLatin1String("/.qttest/share");
Execution Count:4
4
99 if (xdgDataHome.isEmpty())
evaluated: xdgDataHome.isEmpty()
TRUEFALSE
yes
Evaluation Count:13
yes
Evaluation Count:72
13-72
100 xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
executed: xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
Execution Count:13
13
101 if (type == QStandardPaths::DataLocation)
evaluated: type == QStandardPaths::DataLocation
TRUEFALSE
yes
Evaluation Count:10
yes
Evaluation Count:75
10-75
102 appendOrganizationAndApp(xdgDataHome);
executed: appendOrganizationAndApp(xdgDataHome);
Execution Count:10
10
103 return xdgDataHome;
executed: return xdgDataHome;
Execution Count:85
85
104 } -
105 case ConfigLocation: -
106 { -
107 // http://standards.freedesktop.org/basedir-spec/latest/ -
108 QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
executed (the execution status of this line is deduced): QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
-
109 if (isTestModeEnabled())
evaluated: isTestModeEnabled()
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:10
3-10
110 xdgConfigHome = QDir::homePath() + QLatin1String("/.qttest/config");
executed: xdgConfigHome = QDir::homePath() + QLatin1String("/.qttest/config");
Execution Count:3
3
111 if (xdgConfigHome.isEmpty())
evaluated: xdgConfigHome.isEmpty()
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:10
3-10
112 xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
executed: xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
Execution Count:3
3
113 return xdgConfigHome;
executed: return xdgConfigHome;
Execution Count:13
13
114 } -
115 case RuntimeLocation: -
116 { -
117 const uid_t myUid = geteuid();
executed (the execution status of this line is deduced): const uid_t myUid = geteuid();
-
118 // http://standards.freedesktop.org/basedir-spec/latest/ -
119 QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
executed (the execution status of this line is deduced): QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
-
120 if (xdgRuntimeDir.isEmpty()) {
evaluated: xdgRuntimeDir.isEmpty()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:1
1-2
121 const QString userName = QFileSystemEngine::resolveUserName(myUid);
executed (the execution status of this line is deduced): const QString userName = QFileSystemEngine::resolveUserName(myUid);
-
122 xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
executed (the execution status of this line is deduced): xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
-
123 QDir dir(xdgRuntimeDir);
executed (the execution status of this line is deduced): QDir dir(xdgRuntimeDir);
-
124 if (!dir.exists()) {
partially evaluated: !dir.exists()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
0-2
125 if (!QDir().mkdir(xdgRuntimeDir)) {
never evaluated: !QDir().mkdir(xdgRuntimeDir)
0
126 qWarning("QStandardPaths: error creating runtime directory %s: %s", qPrintable(xdgRuntimeDir), qPrintable(qt_error_string(errno)));
never executed (the execution status of this line is deduced): QMessageLogger("io/qstandardpaths_unix.cpp", 126, __PRETTY_FUNCTION__).warning("QStandardPaths: error creating runtime directory %s: %s", QString(xdgRuntimeDir).toLocal8Bit().constData(), QString(qt_error_string((*__errno_location ()))).toLocal8Bit().constData());
-
127 return QString();
never executed: return QString();
0
128 } -
129 }
never executed: }
0
130 qWarning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", qPrintable(xdgRuntimeDir));
executed (the execution status of this line is deduced): QMessageLogger("io/qstandardpaths_unix.cpp", 130, __PRETTY_FUNCTION__).warning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", QString(xdgRuntimeDir).toLocal8Bit().constData());
-
131 }
executed: }
Execution Count:2
2
132 // "The directory MUST be owned by the user" -
133 QFileInfo fileInfo(xdgRuntimeDir);
executed (the execution status of this line is deduced): QFileInfo fileInfo(xdgRuntimeDir);
-
134 if (fileInfo.ownerId() != myUid) {
evaluated: fileInfo.ownerId() != myUid
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:2
1-2
135 qWarning("QStandardPaths: wrong ownership on runtime directory %s, %d instead of %d", qPrintable(xdgRuntimeDir),
executed (the execution status of this line is deduced): QMessageLogger("io/qstandardpaths_unix.cpp", 135, __PRETTY_FUNCTION__).warning("QStandardPaths: wrong ownership on runtime directory %s, %d instead of %d", QString(xdgRuntimeDir).toLocal8Bit().constData(),
-
136 fileInfo.ownerId(), myUid);
executed (the execution status of this line is deduced): fileInfo.ownerId(), myUid);
-
137 return QString();
executed: return QString();
Execution Count:1
1
138 } -
139 // "and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700." -
140 QFile file(xdgRuntimeDir);
executed (the execution status of this line is deduced): QFile file(xdgRuntimeDir);
-
141 const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser;
executed (the execution status of this line is deduced): const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser;
-
142 if (file.permissions() != wantedPerms && !file.setPermissions(wantedPerms)) {
partially evaluated: file.permissions() != wantedPerms
TRUEFALSE
yes
Evaluation Count:2
no
Evaluation Count:0
partially evaluated: !file.setPermissions(wantedPerms)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
0-2
143 qWarning("QStandardPaths: wrong permissions on runtime directory %s", qPrintable(xdgRuntimeDir));
never executed (the execution status of this line is deduced): QMessageLogger("io/qstandardpaths_unix.cpp", 143, __PRETTY_FUNCTION__).warning("QStandardPaths: wrong permissions on runtime directory %s", QString(xdgRuntimeDir).toLocal8Bit().constData());
-
144 return QString();
never executed: return QString();
0
145 } -
146 return xdgRuntimeDir;
executed: return xdgRuntimeDir;
Execution Count:2
2
147 } -
148 default: -
149 break;
executed: break;
Execution Count:17
17
150 } -
151 -
152#ifndef QT_BOOTSTRAPPED -
153 // http://www.freedesktop.org/wiki/Software/xdg-user-dirs -
154 QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
executed (the execution status of this line is deduced): QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
-
155 if (xdgConfigHome.isEmpty())
evaluated: xdgConfigHome.isEmpty()
TRUEFALSE
yes
Evaluation Count:16
yes
Evaluation Count:1
1-16
156 xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
executed: xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
Execution Count:16
16
157 QFile file(xdgConfigHome + QLatin1String("/user-dirs.dirs"));
executed (the execution status of this line is deduced): QFile file(xdgConfigHome + QLatin1String("/user-dirs.dirs"));
-
158 if (!isTestModeEnabled() && file.open(QIODevice::ReadOnly)) {
partially evaluated: !isTestModeEnabled()
TRUEFALSE
yes
Evaluation Count:17
no
Evaluation Count:0
partially evaluated: file.open(QIODevice::ReadOnly)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:17
0-17
159 QHash<QString, QString> lines;
never executed (the execution status of this line is deduced): QHash<QString, QString> lines;
-
160 QTextStream stream(&file);
never executed (the execution status of this line is deduced): QTextStream stream(&file);
-
161 // Only look for lines like: XDG_DESKTOP_DIR="$HOME/Desktop" -
162 QRegExp exp(QLatin1String("^XDG_(.*)_DIR=(.*)$"));
never executed (the execution status of this line is deduced): QRegExp exp(QLatin1String("^XDG_(.*)_DIR=(.*)$"));
-
163 while (!stream.atEnd()) {
never evaluated: !stream.atEnd()
0
164 const QString &line = stream.readLine();
never executed (the execution status of this line is deduced): const QString &line = stream.readLine();
-
165 if (exp.indexIn(line) != -1) {
never evaluated: exp.indexIn(line) != -1
0
166 const QStringList lst = exp.capturedTexts();
never executed (the execution status of this line is deduced): const QStringList lst = exp.capturedTexts();
-
167 const QString key = lst.at(1);
never executed (the execution status of this line is deduced): const QString key = lst.at(1);
-
168 QString value = lst.at(2);
never executed (the execution status of this line is deduced): QString value = lst.at(2);
-
169 if (value.length() > 2
never evaluated: value.length() > 2
0
170 && value.startsWith(QLatin1Char('\"'))
never evaluated: value.startsWith(QLatin1Char('\"'))
0
171 && value.endsWith(QLatin1Char('\"')))
never evaluated: value.endsWith(QLatin1Char('\"'))
0
172 value = value.mid(1, value.length() - 2);
never executed: value = value.mid(1, value.length() - 2);
0
173 // Store the key and value: "DESKTOP", "$HOME/Desktop" -
174 lines[key] = value;
never executed (the execution status of this line is deduced): lines[key] = value;
-
175 }
never executed: }
0
176 }
never executed: }
0
177 -
178 QString key;
never executed (the execution status of this line is deduced): QString key;
-
179 switch (type) { -
180 case DesktopLocation: -
181 key = QLatin1String("DESKTOP");
never executed (the execution status of this line is deduced): key = QLatin1String("DESKTOP");
-
182 break;
never executed: break;
0
183 case DocumentsLocation: -
184 key = QLatin1String("DOCUMENTS");
never executed (the execution status of this line is deduced): key = QLatin1String("DOCUMENTS");
-
185 break;
never executed: break;
0
186 case PicturesLocation: -
187 key = QLatin1String("PICTURES");
never executed (the execution status of this line is deduced): key = QLatin1String("PICTURES");
-
188 break;
never executed: break;
0
189 case MusicLocation: -
190 key = QLatin1String("MUSIC");
never executed (the execution status of this line is deduced): key = QLatin1String("MUSIC");
-
191 break;
never executed: break;
0
192 case MoviesLocation: -
193 key = QLatin1String("VIDEOS");
never executed (the execution status of this line is deduced): key = QLatin1String("VIDEOS");
-
194 break;
never executed: break;
0
195 case DownloadLocation: -
196 key = QLatin1String("DOWNLOAD");
never executed (the execution status of this line is deduced): key = QLatin1String("DOWNLOAD");
-
197 break;
never executed: break;
0
198 default: -
199 break;
never executed: break;
0
200 } -
201 if (!key.isEmpty()) {
never evaluated: !key.isEmpty()
0
202 QString value = lines.value(key);
never executed (the execution status of this line is deduced): QString value = lines.value(key);
-
203 if (!value.isEmpty()) {
never evaluated: !value.isEmpty()
0
204 // value can start with $HOME -
205 if (value.startsWith(QLatin1String("$HOME")))
never evaluated: value.startsWith(QLatin1String("$HOME"))
0
206 value = QDir::homePath() + value.mid(5);
never executed: value = QDir::homePath() + value.mid(5);
0
207 return value;
never executed: return value;
0
208 } -
209 }
never executed: }
0
210 }
never executed: }
0
211#endif -
212 -
213 QString path;
executed (the execution status of this line is deduced): QString path;
-
214 switch (type) { -
215 case DesktopLocation: -
216 path = QDir::homePath() + QLatin1String("/Desktop");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Desktop");
-
217 break;
executed: break;
Execution Count:2
2
218 case DocumentsLocation: -
219 path = QDir::homePath() + QLatin1String("/Documents");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Documents");
-
220 break;
executed: break;
Execution Count:2
2
221 case PicturesLocation: -
222 path = QDir::homePath() + QLatin1String("/Pictures");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Pictures");
-
223 break;
executed: break;
Execution Count:2
2
224 -
225 case FontsLocation: -
226 path = QDir::homePath() + QLatin1String("/.fonts");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/.fonts");
-
227 break;
executed: break;
Execution Count:2
2
228 -
229 case MusicLocation: -
230 path = QDir::homePath() + QLatin1String("/Music");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Music");
-
231 break;
executed: break;
Execution Count:2
2
232 -
233 case MoviesLocation: -
234 path = QDir::homePath() + QLatin1String("/Videos");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Videos");
-
235 break;
executed: break;
Execution Count:2
2
236 case DownloadLocation: -
237 path = QDir::homePath() + QLatin1String("/Downloads");
executed (the execution status of this line is deduced): path = QDir::homePath() + QLatin1String("/Downloads");
-
238 break;
executed: break;
Execution Count:2
2
239 case ApplicationsLocation: -
240 path = writableLocation(GenericDataLocation) + QLatin1String("/applications");
executed (the execution status of this line is deduced): path = writableLocation(GenericDataLocation) + QLatin1String("/applications");
-
241 break;
executed: break;
Execution Count:3
3
242 -
243 default: -
244 break;
never executed: break;
0
245 } -
246 -
247 return path;
executed: return path;
Execution Count:17
17
248} -
249 -
250static QStringList xdgDataDirs() -
251{ -
252 QStringList dirs;
executed (the execution status of this line is deduced): QStringList dirs;
-
253 // http://standards.freedesktop.org/basedir-spec/latest/ -
254 QString xdgDataDirsEnv = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
executed (the execution status of this line is deduced): QString xdgDataDirsEnv = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
-
255 if (xdgDataDirsEnv.isEmpty()) {
evaluated: xdgDataDirsEnv.isEmpty()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:62
2-62
256 dirs.append(QString::fromLatin1("/usr/local/share"));
executed (the execution status of this line is deduced): dirs.append(QString::fromLatin1("/usr/local/share"));
-
257 dirs.append(QString::fromLatin1("/usr/share"));
executed (the execution status of this line is deduced): dirs.append(QString::fromLatin1("/usr/share"));
-
258 } else {
executed: }
Execution Count:2
2
259 dirs = xdgDataDirsEnv.split(QLatin1Char(':'));
executed (the execution status of this line is deduced): dirs = xdgDataDirsEnv.split(QLatin1Char(':'));
-
260 }
executed: }
Execution Count:62
62
261 return dirs;
executed: return dirs;
Execution Count:64
64
262} -
263 -
264QStringList QStandardPaths::standardLocations(StandardLocation type) -
265{ -
266 QStringList dirs;
executed (the execution status of this line is deduced): QStringList dirs;
-
267 switch (type) { -
268 case ConfigLocation: -
269 { -
270 // http://standards.freedesktop.org/basedir-spec/latest/ -
271 const QString xdgConfigDirs = QFile::decodeName(qgetenv("XDG_CONFIG_DIRS"));
executed (the execution status of this line is deduced): const QString xdgConfigDirs = QFile::decodeName(qgetenv("XDG_CONFIG_DIRS"));
-
272 if (xdgConfigDirs.isEmpty())
evaluated: xdgConfigDirs.isEmpty()
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:6
1-6
273 dirs.append(QString::fromLatin1("/etc/xdg"));
executed: dirs.append(QString::fromLatin1("/etc/xdg"));
Execution Count:1
1
274 else -
275 dirs = xdgConfigDirs.split(QLatin1Char(':'));
executed: dirs = xdgConfigDirs.split(QLatin1Char(':'));
Execution Count:6
6
276 } -
277 break;
executed: break;
Execution Count:7
7
278 case GenericDataLocation: -
279 dirs = xdgDataDirs();
executed (the execution status of this line is deduced): dirs = xdgDataDirs();
-
280 break;
executed: break;
Execution Count:62
62
281 case ApplicationsLocation: -
282 dirs = xdgDataDirs();
executed (the execution status of this line is deduced): dirs = xdgDataDirs();
-
283 for (int i = 0; i < dirs.count(); ++i)
evaluated: i < dirs.count()
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:1
1
284 dirs[i].append(QLatin1String("/applications"));
executed: dirs[i].append(QLatin1String("/applications"));
Execution Count:1
1
285 break;
executed: break;
Execution Count:1
1
286 case DataLocation: -
287 dirs = xdgDataDirs();
executed (the execution status of this line is deduced): dirs = xdgDataDirs();
-
288 for (int i = 0; i < dirs.count(); ++i)
evaluated: i < dirs.count()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:1
1-2
289 appendOrganizationAndApp(dirs[i]);
executed: appendOrganizationAndApp(dirs[i]);
Execution Count:2
2
290 break;
executed: break;
Execution Count:1
1
291 default: -
292 break;
executed: break;
Execution Count:1
1
293 } -
294 const QString localDir = writableLocation(type);
executed (the execution status of this line is deduced): const QString localDir = writableLocation(type);
-
295 dirs.prepend(localDir);
executed (the execution status of this line is deduced): dirs.prepend(localDir);
-
296 return dirs;
executed: return dirs;
Execution Count:72
72
297} -
298 -
299QT_END_NAMESPACE -
300 -
301#endif // QT_NO_STANDARDPATHS -
302 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial