Line | Source Code | Coverage |
---|
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | static QBasicMutex qt_library_mutex; | - |
12 | static long qt_find_pattern(const char *s, ulong s_len, | - |
13 | const char *pattern, ulong p_len) | - |
14 | { | - |
15 | if (! s || ! pattern || p_len > s_len) return -1; never executed: return -1; partially evaluated: ! s no Evaluation Count:0 | yes Evaluation Count:227 |
partially evaluated: ! pattern no Evaluation Count:0 | yes Evaluation Count:227 |
partially evaluated: p_len > s_len no Evaluation Count:0 | yes Evaluation Count:227 |
| 0-227 |
16 | ulong i, hs = 0, hp = 0, delta = s_len - p_len; | - |
17 | | - |
18 | for (i = 0; i < p_len; ++i) { evaluated: i < p_len yes Evaluation Count:2724 | yes Evaluation Count:227 |
| 227-2724 |
19 | hs += s[delta + i]; | - |
20 | hp += pattern[i]; | - |
21 | } executed: } Execution Count:2724 | 2724 |
22 | i = delta; | - |
23 | for (;;) { | - |
24 | if (hs == hp && qstrncmp(s + i, pattern, p_len) == 0) evaluated: hs == hp yes Evaluation Count:236 | yes Evaluation Count:54628 |
evaluated: qstrncmp(s + i, pattern, p_len) == 0 yes Evaluation Count:227 | yes Evaluation Count:9 |
| 9-54628 |
25 | return i; executed: return i; Execution Count:227 | 227 |
26 | if (i == 0) partially evaluated: i == 0 no Evaluation Count:0 | yes Evaluation Count:54637 |
| 0-54637 |
27 | break; | 0 |
28 | --i; | - |
29 | hs -= s[i + p_len]; | - |
30 | hs += s[i]; | - |
31 | } executed: } Execution Count:54637 | 54637 |
32 | | - |
33 | return -1; never executed: return -1; | 0 |
34 | } | - |
35 | static bool qt_unix_query(const QString &library, QLibraryPrivate *lib) | - |
36 | { | - |
37 | QFile file(library); | - |
38 | if (!file.open(QIODevice::ReadOnly)) { partially evaluated: !file.open(QIODevice::ReadOnly) no Evaluation Count:0 | yes Evaluation Count:486 |
| 0-486 |
39 | if (lib) | 0 |
40 | lib->errorString = file.errorString(); never executed: lib->errorString = file.errorString(); | 0 |
41 | if (qt_debug_component()) { never evaluated: qt_debug_component() | 0 |
42 | QMessageLogger("plugin/qlibrary.cpp", 240, __PRETTY_FUNCTION__).warning("%s: %s", (const char*) QFile::encodeName(library), | - |
43 | QString(qt_error_string((*__errno_location ()))).toLocal8Bit().constData()); | - |
44 | } | 0 |
45 | return false; never executed: return false; | 0 |
46 | } | - |
47 | | - |
48 | QByteArray data; | - |
49 | const char *filedata = 0; | - |
50 | ulong fdlen = file.size(); | - |
51 | filedata = (char *) file.map(0, fdlen); | - |
52 | if (filedata == 0) { partially evaluated: filedata == 0 no Evaluation Count:0 | yes Evaluation Count:486 |
| 0-486 |
53 | | - |
54 | data = file.readAll(); | - |
55 | filedata = data.constData(); | - |
56 | fdlen = data.size(); | - |
57 | } | 0 |
58 | | - |
59 | | - |
60 | | - |
61 | | - |
62 | bool hasMetaData = false; | - |
63 | long pos = 0; | - |
64 | const char pattern[] = "QTMETADATA "; | - |
65 | const ulong plen = qstrlen(pattern); | - |
66 | | - |
67 | int r = QElfParser().parse(filedata, fdlen, library, lib, &pos, &fdlen); | - |
68 | if (r == QElfParser::Corrupt || r == QElfParser::NotElf) { evaluated: r == QElfParser::Corrupt yes Evaluation Count:3 | yes Evaluation Count:483 |
evaluated: r == QElfParser::NotElf yes Evaluation Count:255 | yes Evaluation Count:228 |
| 3-483 |
69 | if (lib && qt_debug_component()) { partially evaluated: lib yes Evaluation Count:258 | no Evaluation Count:0 |
partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:258 |
| 0-258 |
70 | QMessageLogger("plugin/qlibrary.cpp", 268, __PRETTY_FUNCTION__).warning("QElfParser: %s",QString(lib->errorString).toLocal8Bit().constData()); | - |
71 | } | 0 |
72 | return false; executed: return false; Execution Count:258 | 258 |
73 | } else if (r == QElfParser::QtMetaDataSection) { evaluated: r == QElfParser::QtMetaDataSection yes Evaluation Count:227 | yes Evaluation Count:1 |
| 1-227 |
74 | long rel = qt_find_pattern(filedata + pos, fdlen, pattern, plen); | - |
75 | if (rel < 0) partially evaluated: rel < 0 no Evaluation Count:0 | yes Evaluation Count:227 |
| 0-227 |
76 | pos = -1; never executed: pos = -1; | 0 |
77 | else | - |
78 | pos += rel; executed: pos += rel; Execution Count:227 | 227 |
79 | hasMetaData = true; | - |
80 | } executed: } Execution Count:227 | 227 |
81 | | - |
82 | | - |
83 | | - |
84 | | - |
85 | | - |
86 | | - |
87 | bool ret = false; | - |
88 | | - |
89 | if (pos >= 0) { partially evaluated: pos >= 0 yes Evaluation Count:228 | no Evaluation Count:0 |
| 0-228 |
90 | if (hasMetaData) { evaluated: hasMetaData yes Evaluation Count:227 | yes Evaluation Count:1 |
| 1-227 |
91 | const char *data = filedata + pos; | - |
92 | QJsonDocument doc = QLibraryPrivate::fromRawMetaData(data); | - |
93 | lib->metaData = doc.object(); | - |
94 | if (qt_debug_component()) partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:227 |
| 0-227 |
95 | QMessageLogger("plugin/qlibrary.cpp", 293, __PRETTY_FUNCTION__).warning("Found metadata in lib %s, metadata=\n%s\n", | 0 |
96 | library.toLocal8Bit().constData(), doc.toJson().constData()); never executed: QMessageLogger("plugin/qlibrary.cpp", 293, __PRETTY_FUNCTION__).warning("Found metadata in lib %s, metadata=\n%s\n", library.toLocal8Bit().constData(), doc.toJson().constData()); | 0 |
97 | ret = !doc.isNull(); | - |
98 | } executed: } Execution Count:227 | 227 |
99 | } executed: } Execution Count:228 | 228 |
100 | | - |
101 | if (!ret && lib) evaluated: !ret yes Evaluation Count:1 | yes Evaluation Count:227 |
partially evaluated: lib yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-227 |
102 | lib->errorString = QLibrary::tr("Plugin verification data mismatch in '%1'").arg(library); executed: lib->errorString = QLibrary::tr("Plugin verification data mismatch in '%1'").arg(library); Execution Count:1 | 1 |
103 | file.close(); | - |
104 | return ret; executed: return ret; Execution Count:228 | 228 |
105 | } | - |
106 | | - |
107 | | - |
108 | | - |
109 | static void installCoverageTool(QLibraryPrivate *libPrivate) | - |
110 | { | - |
111 | int ret = __coveragescanner_register_library(libPrivate->fileName.toLocal8Bit()); | - |
112 | | - |
113 | if (qt_debug_component()) { partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:253 |
| 0-253 |
114 | if (ret >= 0) { never evaluated: ret >= 0 | 0 |
115 | QMessageLogger("plugin/qlibrary.cpp", 327, __PRETTY_FUNCTION__).debug("%s: coverage data for %s registered", | - |
116 | __PRETTY_FUNCTION__, | - |
117 | QString(libPrivate->fileName).toLocal8Bit().constData()); | - |
118 | } else { | 0 |
119 | QMessageLogger("plugin/qlibrary.cpp", 331, __PRETTY_FUNCTION__).warning("%s: could not register %s: error %d; coverage data may be incomplete", | - |
120 | __PRETTY_FUNCTION__, | - |
121 | QString(libPrivate->fileName).toLocal8Bit().constData(), | - |
122 | ret); | - |
123 | } | 0 |
124 | } | - |
125 | | - |
126 | | - |
127 | | - |
128 | } executed: } Execution Count:253 | 253 |
129 | | - |
130 | typedef QMap<QString, QLibraryPrivate*> LibraryMap; | - |
131 | | - |
132 | struct LibraryData { | - |
133 | LibraryMap libraryMap; | - |
134 | QSet<QLibraryPrivate*> loadedLibs; | - |
135 | }; | - |
136 | | - |
137 | static LibraryData *libraryData() { static QGlobalStatic<LibraryData > thisGlobalStatic = { { (0) }, false }; if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { LibraryData *x = new LibraryData; if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) delete x; else static QGlobalStaticDeleter<LibraryData > cleanup(thisGlobalStatic); } return thisGlobalStatic.pointer.load(); } partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x) no Evaluation Count:0 | yes Evaluation Count:44 |
evaluated: !thisGlobalStatic.pointer.load() yes Evaluation Count:44 | yes Evaluation Count:4922 |
partially evaluated: !thisGlobalStatic.destroyed yes Evaluation Count:44 | no Evaluation Count:0 |
never executed: delete x; executed: return thisGlobalStatic.pointer.load(); Execution Count:4966 | 0-4966 |
138 | | - |
139 | static LibraryMap *libraryMap() | - |
140 | { | - |
141 | LibraryData *data = libraryData(); | - |
142 | return data ? &data->libraryMap : 0; executed: return data ? &data->libraryMap : 0; Execution Count:3770 | 3770 |
143 | } | - |
144 | | - |
145 | QLibraryPrivate::QLibraryPrivate(const QString &canonicalFileName, const QString &version) | - |
146 | : pHnd(0), fileName(canonicalFileName), fullVersion(version), instance(0), | - |
147 | loadHints(0), | - |
148 | libraryRefCount(1), libraryUnloadCount(0), pluginState(MightBeAPlugin) | - |
149 | { libraryMap()->insert(canonicalFileName, this); } executed: } Execution Count:608 | 608 |
150 | | - |
151 | QLibraryPrivate *QLibraryPrivate::findOrCreate(const QString &fileName, const QString &version) | - |
152 | { | - |
153 | QMutexLocker locker(&qt_library_mutex); | - |
154 | if (QLibraryPrivate *lib = libraryMap()->value(fileName)) { evaluated: QLibraryPrivate *lib = libraryMap()->value(fileName) yes Evaluation Count:147 | yes Evaluation Count:608 |
| 147-608 |
155 | lib->libraryRefCount.ref(); | - |
156 | return lib; executed: return lib; Execution Count:147 | 147 |
157 | } | - |
158 | | - |
159 | return new QLibraryPrivate(fileName, version); executed: return new QLibraryPrivate(fileName, version); Execution Count:608 | 608 |
160 | } | - |
161 | | - |
162 | QLibraryPrivate::~QLibraryPrivate() | - |
163 | { | - |
164 | LibraryMap * const map = libraryMap(); | - |
165 | if (map) { partially evaluated: map yes Evaluation Count:2407 | no Evaluation Count:0 |
| 0-2407 |
166 | QLibraryPrivate *that = map->take(fileName); | - |
167 | qt_noop(); | - |
168 | (void)that;; | - |
169 | } executed: } Execution Count:2407 | 2407 |
170 | } executed: } Execution Count:2407 | 2407 |
171 | | - |
172 | QFunctionPointer QLibraryPrivate::resolve(const char *symbol) | - |
173 | { | - |
174 | if (!pHnd) partially evaluated: !pHnd no Evaluation Count:0 | yes Evaluation Count:3475 |
| 0-3475 |
175 | return 0; never executed: return 0; | 0 |
176 | return resolve_sys(symbol); executed: return resolve_sys(symbol); Execution Count:3475 | 3475 |
177 | } | - |
178 | | - |
179 | | - |
180 | bool QLibraryPrivate::load() | - |
181 | { | - |
182 | libraryUnloadCount.ref(); | - |
183 | if (pHnd) evaluated: pHnd yes Evaluation Count:105 | yes Evaluation Count:260 |
| 105-260 |
184 | return true; executed: return true; Execution Count:105 | 105 |
185 | if (fileName.isEmpty()) partially evaluated: fileName.isEmpty() no Evaluation Count:0 | yes Evaluation Count:260 |
| 0-260 |
186 | return false; never executed: return false; | 0 |
187 | | - |
188 | bool ret = load_sys(); | - |
189 | if (qt_debug_component()) partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:260 |
| 0-260 |
190 | QMessageLogger("plugin/qlibrary.cpp", 402, __PRETTY_FUNCTION__).debug() << "loaded library" << fileName; never executed: QMessageLogger("plugin/qlibrary.cpp", 402, __PRETTY_FUNCTION__).debug() << "loaded library" << fileName; | 0 |
191 | if (ret) { evaluated: ret yes Evaluation Count:253 | yes Evaluation Count:7 |
| 7-253 |
192 | | - |
193 | | - |
194 | if (LibraryData *lib = libraryData()) { partially evaluated: LibraryData *lib = libraryData() yes Evaluation Count:253 | no Evaluation Count:0 |
| 0-253 |
195 | lib->loadedLibs += this; | - |
196 | libraryRefCount.ref(); | - |
197 | } executed: } Execution Count:253 | 253 |
198 | | - |
199 | installCoverageTool(this); | - |
200 | } executed: } Execution Count:253 | 253 |
201 | | - |
202 | return ret; executed: return ret; Execution Count:260 | 260 |
203 | } | - |
204 | | - |
205 | bool QLibraryPrivate::unload() | - |
206 | { | - |
207 | if (!pHnd) evaluated: !pHnd yes Evaluation Count:1201 | yes Evaluation Count:945 |
| 945-1201 |
208 | return false; executed: return false; Execution Count:1201 | 1201 |
209 | if (!libraryUnloadCount.deref()) { evaluated: !libraryUnloadCount.deref() yes Evaluation Count:943 | yes Evaluation Count:2 |
| 2-943 |
210 | delete inst.data(); | - |
211 | if (unload_sys()) { partially evaluated: unload_sys() yes Evaluation Count:943 | no Evaluation Count:0 |
| 0-943 |
212 | if (qt_debug_component()) partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:943 |
| 0-943 |
213 | QMessageLogger("plugin/qlibrary.cpp", 425, __PRETTY_FUNCTION__).warning() << "QLibraryPrivate::unload succeeded on" << fileName; never executed: QMessageLogger("plugin/qlibrary.cpp", 425, __PRETTY_FUNCTION__).warning() << "QLibraryPrivate::unload succeeded on" << fileName; | 0 |
214 | | - |
215 | | - |
216 | if (LibraryData *lib = libraryData()) { partially evaluated: LibraryData *lib = libraryData() yes Evaluation Count:943 | no Evaluation Count:0 |
| 0-943 |
217 | if (lib->loadedLibs.remove(this)) partially evaluated: lib->loadedLibs.remove(this) yes Evaluation Count:943 | no Evaluation Count:0 |
| 0-943 |
218 | libraryRefCount.deref(); executed: libraryRefCount.deref(); Execution Count:943 | 943 |
219 | } executed: } Execution Count:943 | 943 |
220 | pHnd = 0; | - |
221 | instance = 0; | - |
222 | } executed: } Execution Count:943 | 943 |
223 | } executed: } Execution Count:943 | 943 |
224 | | - |
225 | return (pHnd == 0); executed: return (pHnd == 0); Execution Count:945 | 945 |
226 | } | - |
227 | | - |
228 | void QLibraryPrivate::release() | - |
229 | { | - |
230 | QMutexLocker locker(&qt_library_mutex); | - |
231 | if (!libraryRefCount.deref()) evaluated: !libraryRefCount.deref() yes Evaluation Count:2407 | yes Evaluation Count:189 |
| 189-2407 |
232 | delete this; executed: delete this; Execution Count:2407 | 2407 |
233 | } executed: } Execution Count:2596 | 2596 |
234 | | - |
235 | bool QLibraryPrivate::loadPlugin() | - |
236 | { | - |
237 | if (instance) { evaluated: instance yes Evaluation Count:1 | yes Evaluation Count:167 |
| 1-167 |
238 | libraryUnloadCount.ref(); | - |
239 | return true; executed: return true; Execution Count:1 | 1 |
240 | } | - |
241 | if (pluginState == IsNotAPlugin) partially evaluated: pluginState == IsNotAPlugin no Evaluation Count:0 | yes Evaluation Count:167 |
| 0-167 |
242 | return false; never executed: return false; | 0 |
243 | if (load()) { evaluated: load() yes Evaluation Count:166 | yes Evaluation Count:1 |
| 1-166 |
244 | instance = (QtPluginInstanceFunction)resolve("qt_plugin_instance"); | - |
245 | return instance; executed: return instance; Execution Count:166 | 166 |
246 | } | - |
247 | if (qt_debug_component()) partially evaluated: qt_debug_component() no Evaluation Count:0 | yes Evaluation Count:1 |
| 0-1 |
248 | QMessageLogger("plugin/qlibrary.cpp", 460, __PRETTY_FUNCTION__).warning() << "QLibraryPrivate::loadPlugin failed on" << fileName << ":" << errorString; never executed: QMessageLogger("plugin/qlibrary.cpp", 460, __PRETTY_FUNCTION__).warning() << "QLibraryPrivate::loadPlugin failed on" << fileName << ":" << errorString; | 0 |
249 | pluginState = IsNotAPlugin; | - |
250 | return false; executed: return false; Execution Count:1 | 1 |
251 | } | - |
252 | bool QLibrary::isLibrary(const QString &fileName) | - |
253 | { | - |
254 | | - |
255 | | - |
256 | | - |
257 | QString completeSuffix = QFileInfo(fileName).completeSuffix(); | - |
258 | if (completeSuffix.isEmpty()) partially evaluated: completeSuffix.isEmpty() no Evaluation Count:0 | yes Evaluation Count:16 |
| 0-16 |
259 | return false; never executed: return false; | 0 |
260 | QStringList suffixes = completeSuffix.split(QLatin1Char('.')); | - |
261 | QStringList validSuffixList; | - |
262 | validSuffixList << QLatin1String("so"); | - |
263 | int suffix; | - |
264 | int suffixPos = -1; | - |
265 | for (suffix = 0; suffix < validSuffixList.count() && suffixPos == -1; ++suffix) evaluated: suffix < validSuffixList.count() yes Evaluation Count:16 | yes Evaluation Count:16 |
partially evaluated: suffixPos == -1 yes Evaluation Count:16 | no Evaluation Count:0 |
| 0-16 |
266 | suffixPos = suffixes.indexOf(validSuffixList.at(suffix)); executed: suffixPos = suffixes.indexOf(validSuffixList.at(suffix)); Execution Count:16 | 16 |
267 | | - |
268 | bool valid = suffixPos != -1; | - |
269 | for (int i = suffixPos + 1; i < suffixes.count() && valid; ++i) evaluated: i < suffixes.count() yes Evaluation Count:14 | yes Evaluation Count:8 |
evaluated: valid yes Evaluation Count:6 | yes Evaluation Count:8 |
| 6-14 |
270 | if (i != suffixPos) partially evaluated: i != suffixPos yes Evaluation Count:6 | no Evaluation Count:0 |
| 0-6 |
271 | suffixes.at(i).toInt(&valid); executed: suffixes.at(i).toInt(&valid); Execution Count:6 | 6 |
272 | return valid; executed: return valid; Execution Count:16 | 16 |
273 | | - |
274 | | - |
275 | | - |
276 | } | - |
277 | typedef const char * (*QtPluginQueryVerificationDataFunction)(); | - |
278 | | - |
279 | bool qt_get_metadata(QtPluginQueryVerificationDataFunction pfn, QLibraryPrivate *priv, bool *exceptionThrown) | - |
280 | { | - |
281 | *exceptionThrown = false; | - |
282 | const char *szData = 0; | - |
283 | if (!pfn) | 0 |
284 | return false; never executed: return false; | 0 |
285 | | - |
286 | | - |
287 | | - |
288 | | - |
289 | | - |
290 | szData = pfn(); | - |
291 | | - |
292 | if (!szData) | 0 |
293 | return false; never executed: return false; | 0 |
294 | QJsonDocument doc = QLibraryPrivate::fromRawMetaData(szData); | - |
295 | if (doc.isNull()) never evaluated: doc.isNull() | 0 |
296 | return false; never executed: return false; | 0 |
297 | priv->metaData = doc.object(); | - |
298 | return true; never executed: return true; | 0 |
299 | } | - |
300 | | - |
301 | bool QLibraryPrivate::isPlugin() | - |
302 | { | - |
303 | if (pluginState == MightBeAPlugin) evaluated: pluginState == MightBeAPlugin yes Evaluation Count:467 | yes Evaluation Count:52 |
| 52-467 |
304 | updatePluginState(); executed: updatePluginState(); Execution Count:467 | 467 |
305 | | - |
306 | return pluginState == IsAPlugin; executed: return pluginState == IsAPlugin; Execution Count:519 | 519 |
307 | } | - |
308 | | - |
309 | void QLibraryPrivate::updatePluginState() | - |
310 | { | - |
311 | errorString.clear(); | - |
312 | if (pluginState != MightBeAPlugin) evaluated: pluginState != MightBeAPlugin yes Evaluation Count:2 | yes Evaluation Count:486 |
| 2-486 |
313 | return; executed: return; Execution Count:2 | 2 |
314 | | - |
315 | bool success = false; | - |
316 | | - |
317 | | - |
318 | if (fileName.endsWith(QLatin1String(".debug"))) { partially evaluated: fileName.endsWith(QLatin1String(".debug")) no Evaluation Count:0 | yes Evaluation Count:486 |
| 0-486 |
319 | | - |
320 | | - |
321 | | - |
322 | | - |
323 | | - |
324 | | - |
325 | errorString = QLibrary::tr("The shared library was not found."); | - |
326 | pluginState = IsNotAPlugin; | - |
327 | return; | 0 |
328 | } | - |
329 | | - |
330 | | - |
331 | | - |
332 | if (!pHnd) { partially evaluated: !pHnd yes Evaluation Count:486 | no Evaluation Count:0 |
| 0-486 |
333 | | - |
334 | success = qt_unix_query(fileName, this); | - |
335 | } else executed: } Execution Count:486 | 486 |
336 | | - |
337 | { | - |
338 | bool retryLoadLibrary = false; | - |
339 | do { | - |
340 | bool temporary_load = false; | - |
341 | | - |
342 | | - |
343 | | - |
344 | if (!pHnd) { | 0 |
345 | | - |
346 | | - |
347 | | - |
348 | | - |
349 | | - |
350 | | - |
351 | | - |
352 | temporary_load = load_sys(); | - |
353 | | - |
354 | } | 0 |
355 | QtPluginQueryVerificationDataFunction getMetaData = __null; | - |
356 | | - |
357 | bool exceptionThrown = false; | - |
358 | bool ret = false; | - |
359 | { | - |
360 | getMetaData = (QtPluginQueryVerificationDataFunction) resolve("qt_plugin_query_metadata"); | - |
361 | } | - |
362 | | - |
363 | if (getMetaData) never evaluated: getMetaData | 0 |
364 | ret = qt_get_metadata(getMetaData, this, &exceptionThrown); never executed: ret = qt_get_metadata(getMetaData, this, &exceptionThrown); | 0 |
365 | | - |
366 | if (!exceptionThrown) { never evaluated: !exceptionThrown | 0 |
367 | if (!ret) { | 0 |
368 | if (temporary_load) never evaluated: temporary_load | 0 |
369 | unload_sys(); never executed: unload_sys(); | 0 |
370 | } else { | 0 |
371 | success = true; | - |
372 | } | 0 |
373 | retryLoadLibrary = false; | - |
374 | } | 0 |
375 | } while (retryLoadLibrary); never evaluated: retryLoadLibrary | 0 |
376 | | - |
377 | } | 0 |
378 | | - |
379 | if (!success) { evaluated: !success yes Evaluation Count:259 | yes Evaluation Count:227 |
| 227-259 |
380 | if (errorString.isEmpty()){ partially evaluated: errorString.isEmpty() no Evaluation Count:0 | yes Evaluation Count:259 |
| 0-259 |
381 | if (fileName.isEmpty()) never evaluated: fileName.isEmpty() | 0 |
382 | errorString = QLibrary::tr("The shared library was not found."); never executed: errorString = QLibrary::tr("The shared library was not found."); | 0 |
383 | else | - |
384 | errorString = QLibrary::tr("The file '%1' is not a valid Qt plugin.").arg(fileName); never executed: errorString = QLibrary::tr("The file '%1' is not a valid Qt plugin.").arg(fileName); | 0 |
385 | } | - |
386 | pluginState = IsNotAPlugin; | - |
387 | return; executed: return; Execution Count:259 | 259 |
388 | } | - |
389 | | - |
390 | pluginState = IsNotAPlugin; | - |
391 | | - |
392 | uint qt_version = (uint)metaData.value(QLatin1String("version")).toDouble(); | - |
393 | bool debug = metaData.value(QLatin1String("debug")).toBool(); | - |
394 | if ((qt_version & 0x00ff00) > (0x050002 & 0x00ff00) || (qt_version & 0xff0000) != (0x050002 & 0xff0000)) { partially evaluated: (qt_version & 0x00ff00) > (0x050002 & 0x00ff00) no Evaluation Count:0 | yes Evaluation Count:227 |
partially evaluated: (qt_version & 0xff0000) != (0x050002 & 0xff0000) no Evaluation Count:0 | yes Evaluation Count:227 |
| 0-227 |
395 | if (qt_debug_component()) { never evaluated: qt_debug_component() | 0 |
396 | QMessageLogger("plugin/qlibrary.cpp", 707, __PRETTY_FUNCTION__).warning("In %s:\n" | - |
397 | " Plugin uses incompatible Qt library (%d.%d.%d) [%s]", | - |
398 | (const char*) QFile::encodeName(fileName), | - |
399 | (qt_version&0xff0000) >> 16, (qt_version&0xff00) >> 8, qt_version&0xff, | - |
400 | debug ? "debug" : "release"); | - |
401 | } | 0 |
402 | errorString = QLibrary::tr("The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]") | - |
403 | .arg(fileName) | - |
404 | .arg((qt_version&0xff0000) >> 16) | - |
405 | .arg((qt_version&0xff00) >> 8) | - |
406 | .arg(qt_version&0xff) | - |
407 | .arg(debug ? QLatin1String("debug") : QLatin1String("release")); | - |
408 | | - |
409 | | - |
410 | | - |
411 | | - |
412 | | - |
413 | | - |
414 | } else { | 0 |
415 | pluginState = IsAPlugin; | - |
416 | } executed: } Execution Count:227 | 227 |
417 | } | - |
418 | bool QLibrary::load() | - |
419 | { | - |
420 | if (!d) evaluated: !d yes Evaluation Count:1 | yes Evaluation Count:198 |
| 1-198 |
421 | return false; executed: return false; Execution Count:1 | 1 |
422 | if (did_load) partially evaluated: did_load no Evaluation Count:0 | yes Evaluation Count:198 |
| 0-198 |
423 | return d->pHnd; never executed: return d->pHnd; | 0 |
424 | did_load = true; | - |
425 | return d->load(); executed: return d->load(); Execution Count:198 | 198 |
426 | } | - |
427 | bool QLibrary::unload() | - |
428 | { | - |
429 | if (did_load) { evaluated: did_load yes Evaluation Count:221 | yes Evaluation Count:26 |
| 26-221 |
430 | did_load = false; | - |
431 | return d->unload(); executed: return d->unload(); Execution Count:221 | 221 |
432 | } | - |
433 | return false; executed: return false; Execution Count:26 | 26 |
434 | } | - |
435 | | - |
436 | | - |
437 | | - |
438 | | - |
439 | | - |
440 | | - |
441 | bool QLibrary::isLoaded() const | - |
442 | { | - |
443 | return d && d->pHnd; executed: return d && d->pHnd; Execution Count:7621 | 7621 |
444 | } | - |
445 | | - |
446 | | - |
447 | | - |
448 | | - |
449 | | - |
450 | QLibrary::QLibrary(QObject *parent) | - |
451 | :QObject(parent), d(0), did_load(false) | - |
452 | { | - |
453 | } executed: } Execution Count:51 | 51 |
454 | QLibrary::QLibrary(const QString& fileName, QObject *parent) | - |
455 | :QObject(parent), d(0), did_load(false) | - |
456 | { | - |
457 | setFileName(fileName); | - |
458 | } executed: } Execution Count:31 | 31 |
459 | QLibrary::QLibrary(const QString& fileName, int verNum, QObject *parent) | - |
460 | :QObject(parent), d(0), did_load(false) | - |
461 | { | - |
462 | setFileNameAndVersion(fileName, verNum); | - |
463 | } executed: } Execution Count:125 | 125 |
464 | QLibrary::QLibrary(const QString& fileName, const QString &version, QObject *parent) | - |
465 | :QObject(parent), d(0), did_load(false) | - |
466 | { | - |
467 | setFileNameAndVersion(fileName, version); | - |
468 | } | 0 |
469 | QLibrary::~QLibrary() | - |
470 | { | - |
471 | if (d) evaluated: d yes Evaluation Count:376 | yes Evaluation Count:1 |
| 1-376 |
472 | d->release(); executed: d->release(); Execution Count:376 | 376 |
473 | } executed: } Execution Count:377 | 377 |
474 | void QLibrary::setFileName(const QString &fileName) | - |
475 | { | - |
476 | QLibrary::LoadHints lh; | - |
477 | if (d) { evaluated: d yes Evaluation Count:3 | yes Evaluation Count:60 |
| 3-60 |
478 | lh = d->loadHints; | - |
479 | d->release(); | - |
480 | d = 0; | - |
481 | did_load = false; | - |
482 | } executed: } Execution Count:3 | 3 |
483 | d = QLibraryPrivate::findOrCreate(fileName); | - |
484 | d->loadHints = lh; | - |
485 | } executed: } Execution Count:63 | 63 |
486 | | - |
487 | QString QLibrary::fileName() const | - |
488 | { | - |
489 | if (d) partially evaluated: d yes Evaluation Count:26 | no Evaluation Count:0 |
| 0-26 |
490 | return d->qualifiedFileName.isEmpty() ? d->fileName : d->qualifiedFileName; executed: return d->qualifiedFileName.isEmpty() ? d->fileName : d->qualifiedFileName; Execution Count:26 | 26 |
491 | return QString(); never executed: return QString(); | 0 |
492 | } | - |
493 | void QLibrary::setFileNameAndVersion(const QString &fileName, int verNum) | - |
494 | { | - |
495 | QLibrary::LoadHints lh; | - |
496 | if (d) { evaluated: d yes Evaluation Count:25 | yes Evaluation Count:125 |
| 25-125 |
497 | lh = d->loadHints; | - |
498 | d->release(); | - |
499 | d = 0; | - |
500 | did_load = false; | - |
501 | } executed: } Execution Count:25 | 25 |
502 | d = QLibraryPrivate::findOrCreate(fileName, verNum >= 0 ? QString::number(verNum) : QString()); | - |
503 | d->loadHints = lh; | - |
504 | } executed: } Execution Count:150 | 150 |
505 | void QLibrary::setFileNameAndVersion(const QString &fileName, const QString &version) | - |
506 | { | - |
507 | QLibrary::LoadHints lh; | - |
508 | if (d) { partially evaluated: d no Evaluation Count:0 | yes Evaluation Count:18 |
| 0-18 |
509 | lh = d->loadHints; | - |
510 | d->release(); | - |
511 | d = 0; | - |
512 | did_load = false; | - |
513 | } | 0 |
514 | d = QLibraryPrivate::findOrCreate(fileName, version); | - |
515 | d->loadHints = lh; | - |
516 | } executed: } Execution Count:18 | 18 |
517 | QFunctionPointer QLibrary::resolve(const char *symbol) | - |
518 | { | - |
519 | if (!isLoaded() && !load()) evaluated: !isLoaded() yes Evaluation Count:11 | yes Evaluation Count:3299 |
evaluated: !load() yes Evaluation Count:1 | yes Evaluation Count:10 |
| 1-3299 |
520 | return 0; executed: return 0; Execution Count:1 | 1 |
521 | return d->resolve(symbol); executed: return d->resolve(symbol); Execution Count:3309 | 3309 |
522 | } | - |
523 | QFunctionPointer QLibrary::resolve(const QString &fileName, const char *symbol) | - |
524 | { | - |
525 | QLibrary library(fileName); | - |
526 | return library.resolve(symbol); never executed: return library.resolve(symbol); | 0 |
527 | } | - |
528 | QFunctionPointer QLibrary::resolve(const QString &fileName, int verNum, const char *symbol) | - |
529 | { | - |
530 | QLibrary library(fileName, verNum); | - |
531 | return library.resolve(symbol); executed: return library.resolve(symbol); Execution Count:11 | 11 |
532 | } | - |
533 | QFunctionPointer QLibrary::resolve(const QString &fileName, const QString &version, const char *symbol) | - |
534 | { | - |
535 | QLibrary library(fileName, version); | - |
536 | return library.resolve(symbol); never executed: return library.resolve(symbol); | 0 |
537 | } | - |
538 | | - |
539 | | - |
540 | | - |
541 | | - |
542 | | - |
543 | | - |
544 | | - |
545 | QString QLibrary::errorString() const | - |
546 | { | - |
547 | return (!d || d->errorString.isEmpty()) ? tr("Unknown error") : d->errorString; executed: return (!d || d->errorString.isEmpty()) ? tr("Unknown error") : d->errorString; Execution Count:21 | 21 |
548 | } | - |
549 | void QLibrary::setLoadHints(LoadHints hints) | - |
550 | { | - |
551 | if (!d) { partially evaluated: !d yes Evaluation Count:3 | no Evaluation Count:0 |
| 0-3 |
552 | d = QLibraryPrivate::findOrCreate(QString()); | - |
553 | d->errorString.clear(); | - |
554 | } executed: } Execution Count:3 | 3 |
555 | d->loadHints = hints; | - |
556 | } executed: } Execution Count:3 | 3 |
557 | | - |
558 | QLibrary::LoadHints QLibrary::loadHints() const | - |
559 | { | - |
560 | return d ? d->loadHints : (QLibrary::LoadHints)0; executed: return d ? d->loadHints : (QLibrary::LoadHints)0; Execution Count:6 | 6 |
561 | } | - |
562 | | - |
563 | | - |
564 | bool qt_debug_component() | - |
565 | { | - |
566 | static int debug_env = -1; | - |
567 | if (debug_env == -1) evaluated: debug_env == -1 yes Evaluation Count:44 | yes Evaluation Count:2896 |
| 44-2896 |
568 | debug_env = ::qgetenv("QT_DEBUG_PLUGINS").toInt(); executed: debug_env = ::qgetenv("QT_DEBUG_PLUGINS").toInt(); Execution Count:44 | 44 |
569 | | - |
570 | return debug_env != 0; executed: return debug_env != 0; Execution Count:2940 | 2940 |
571 | } | - |
572 | | - |
573 | | - |
574 | | - |
| | |