From 2622c69097255dda09300d34c1cd19eccf223956 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sun, 16 Feb 2020 14:30:02 +0000 Subject: [PATCH] create leading directories of settings filepath for compatibility with code expecting it to be created Signed-off-by: Ivailo Monev --- src/core/io/qsettings.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/io/qsettings.cpp b/src/core/io/qsettings.cpp index 946fcbf21..59e1cb21c 100644 --- a/src/core/io/qsettings.cpp +++ b/src/core/io/qsettings.cpp @@ -220,11 +220,18 @@ static QSettingsCustomFormat getSettingsFormat(QSettings::Format format) return result; } +static inline QString createLeadingDir(const QString &filename) +{ + QFileInfo info(filename); + QDir().mkpath(info.absolutePath()); + return filename; +} + static QString getSettingsPath(QSettings::Scope scope, const QString &filename, const QString &extension) { QFileInfo info(filename); if (info.isAbsolute()) { - return filename; + return createLeadingDir(filename); } QString nameandext = filename; @@ -240,17 +247,12 @@ static QString getSettingsPath(QSettings::Scope scope, const QString &filename, foreach (const QString &location, locations) { QDir dir(location); if (dir.exists(location)) { - return location + QDir::separator() + nameandext; + return createLeadingDir(location + QDir::separator() + nameandext); } } const QString fallback = QLibraryInfo::location(QLibraryInfo::SettingsPath); - QDir fallbackdir(fallback); - if (!fallbackdir.mkpath(fallback)) { - qWarning("QSettingsPrivate::getSettingsPath: no settings location"); - fallbackdir.currentPath() + QDir::separator() + nameandext; - } - return fallback + QDir::separator() + nameandext; + return createLeadingDir(fallback + QDir::separator() + nameandext); } QSettingsPrivate::QSettingsPrivate(QSettings::Format format, QSettings::Scope scope)