summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-03-26 10:20:11 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-08-13 17:09:43 +0000
commitc65b8381bb55951993f10698427e7fbbe56f37af (patch)
tree9260d60a0aa76a1823fa299feb6fd640db59c96b
parent6fca88607b0300cf4ddd81af924d7ef25abd7bd1 (diff)
Use QScopedPointer for library paths
This way we can remove some life cycle management code. Change-Id: I8e0c9db0a8c5f0941bbd834380d3e3b3a9d2f306 Reviewed-by: Adam Majer <adamm@zombino.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp52
1 files changed, 21 insertions, 31 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index e08f709cd2..687ff6d9a0 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -323,17 +323,9 @@ uint QCoreApplicationPrivate::attribs = (1 << Qt::AA_SynthesizeMouseForUnhandled
struct QCoreApplicationData {
QCoreApplicationData() Q_DECL_NOTHROW {
-#ifndef QT_NO_LIBRARY
- app_libpaths = 0;
- manual_libpaths = 0;
-#endif
applicationNameSet = false;
}
~QCoreApplicationData() {
-#ifndef QT_NO_LIBRARY
- delete app_libpaths;
- delete manual_libpaths;
-#endif
#ifndef QT_NO_QOBJECT
// cleanup the QAdoptedThread created for the main() thread
if (QCoreApplicationPrivate::theMainThread) {
@@ -377,8 +369,8 @@ struct QCoreApplicationData {
bool applicationNameSet; // true if setApplicationName was called
#ifndef QT_NO_LIBRARY
- QStringList *app_libpaths;
- QStringList *manual_libpaths;
+ QScopedPointer<QStringList> app_libpaths;
+ QScopedPointer<QStringList> manual_libpaths;
#endif
};
@@ -571,9 +563,9 @@ void QCoreApplicationPrivate::checkReceiverThread(QObject *receiver)
void QCoreApplicationPrivate::appendApplicationPathToLibraryPaths()
{
#ifndef QT_NO_LIBRARY
- QStringList *app_libpaths = coreappdata()->app_libpaths;
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
if (!app_libpaths)
- coreappdata()->app_libpaths = app_libpaths = new QStringList;
+ coreappdata()->app_libpaths.reset(app_libpaths = new QStringList);
QString app_location = QCoreApplication::applicationFilePath();
app_location.truncate(app_location.lastIndexOf(QLatin1Char('/')));
#ifdef Q_OS_WINRT
@@ -774,16 +766,14 @@ void QCoreApplication::init()
// Reset the lib paths, so that they will be recomputed, taking the availability of argv[0]
// into account. If necessary, recompute right away and replay the manual changes on top of the
// new lib paths.
- QStringList *appPaths = coreappdata()->app_libpaths;
- QStringList *manualPaths = coreappdata()->manual_libpaths;
+ QStringList *appPaths = coreappdata()->app_libpaths.take();
+ QStringList *manualPaths = coreappdata()->manual_libpaths.take();
if (appPaths) {
- coreappdata()->app_libpaths = 0;
if (manualPaths) {
// Replay the delta. As paths can only be prepended to the front or removed from
// anywhere in the list, we can just linearly scan the lists and find the items that
// have been removed. Once the original list is exhausted we know all the remaining
// items have been added.
- coreappdata()->manual_libpaths = 0;
QStringList newPaths(libraryPaths());
for (int i = manualPaths->length(), j = appPaths->length(); i > 0 || j > 0; qt_noop()) {
if (--j < 0) {
@@ -796,7 +786,7 @@ void QCoreApplication::init()
}
}
delete manualPaths;
- coreappdata()->manual_libpaths = new QStringList(newPaths);
+ coreappdata()->manual_libpaths.reset(new QStringList(newPaths));
}
delete appPaths;
}
@@ -872,10 +862,8 @@ QCoreApplication::~QCoreApplication()
#endif
#ifndef QT_NO_LIBRARY
- delete coreappdata()->app_libpaths;
- coreappdata()->app_libpaths = 0;
- delete coreappdata()->manual_libpaths;
- coreappdata()->manual_libpaths = 0;
+ coreappdata()->app_libpaths.reset();
+ coreappdata()->manual_libpaths.reset();
#endif
}
@@ -2540,7 +2528,8 @@ QStringList QCoreApplication::libraryPaths()
return *(coreappdata()->manual_libpaths);
if (!coreappdata()->app_libpaths) {
- QStringList *app_libpaths = coreappdata()->app_libpaths = new QStringList;
+ QStringList *app_libpaths = new QStringList;
+ coreappdata()->app_libpaths.reset(app_libpaths);
QString installPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath);
if (QFile::exists(installPathPlugins)) {
// Make sure we convert from backslashes to slashes.
@@ -2591,9 +2580,10 @@ void QCoreApplication::setLibraryPaths(const QStringList &paths)
if (!coreappdata()->app_libpaths)
libraryPaths();
- if (!coreappdata()->manual_libpaths)
- coreappdata()->manual_libpaths = new QStringList;
- *(coreappdata()->manual_libpaths) = paths;
+ if (coreappdata()->manual_libpaths)
+ *(coreappdata()->manual_libpaths) = paths;
+ else
+ coreappdata()->manual_libpaths.reset(new QStringList(paths));
locker.unlock();
QFactoryLoader::refreshAll();
@@ -2625,18 +2615,18 @@ void QCoreApplication::addLibraryPath(const QString &path)
QMutexLocker locker(libraryPathMutex());
- QStringList *libpaths = coreappdata()->manual_libpaths;
+ QStringList *libpaths = coreappdata()->manual_libpaths.data();
if (libpaths) {
if (libpaths->contains(canonicalPath))
return;
} else {
// make sure that library paths are initialized
libraryPaths();
- QStringList *app_libpaths = coreappdata()->app_libpaths;
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
if (app_libpaths->contains(canonicalPath))
return;
- libpaths = coreappdata()->manual_libpaths = new QStringList(*app_libpaths);
+ coreappdata()->manual_libpaths.reset(libpaths = new QStringList(*app_libpaths));
}
libpaths->prepend(canonicalPath);
@@ -2664,18 +2654,18 @@ void QCoreApplication::removeLibraryPath(const QString &path)
QMutexLocker locker(libraryPathMutex());
- QStringList *libpaths = coreappdata()->manual_libpaths;
+ QStringList *libpaths = coreappdata()->manual_libpaths.data();
if (libpaths) {
if (libpaths->removeAll(canonicalPath) == 0)
return;
} else {
// make sure that library paths is initialized
libraryPaths();
- QStringList *app_libpaths = coreappdata()->app_libpaths;
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
if (!app_libpaths->contains(canonicalPath))
return;
- libpaths = coreappdata()->manual_libpaths = new QStringList(*app_libpaths);
+ coreappdata()->manual_libpaths.reset(libpaths = new QStringList(*app_libpaths));
libpaths->removeAll(canonicalPath);
}