Normalise and deduplicate paths for XDG_DATA_DIRS

This removes the trailing slashes from the path and then removes dirs
set twice in XDG_DATA_DIRS (always removes those from the right side).

There's no use for duplicit dirs in XDG_DATA_DIRS because if whatever is
being looked up is not found in the duplicated dir the first time, it
won't be there the second time.

Currently it causes troubles for example in mime types, where it returns
duplicated mime types as the same dir is searched multiple times.

For obtaining the original value of XDG_DATA_DIRS, one can use
qgetenv("XDG_DATA_DIRS").

Change-Id: Ic4f8ef6c6fe096555948e318899207e9d4ca8289
Reviewed-by: David Faure KDE (deprecated, use kdab instead) <faure@kde.org>
This commit is contained in:
Martin Klapetek 2013-09-03 10:29:42 +02:00 committed by The Qt Project
parent ff6754fb8c
commit 9deacd7f20

View File

@ -257,6 +257,17 @@ static QStringList xdgDataDirs()
dirs.append(QString::fromLatin1("/usr/share")); dirs.append(QString::fromLatin1("/usr/share"));
} else { } else {
dirs = xdgDataDirsEnv.split(QLatin1Char(':')); dirs = xdgDataDirsEnv.split(QLatin1Char(':'));
// Normalize paths
for (int i = 0; i < dirs.count(); i++)
dirs[i] = QDir::cleanPath(dirs.at(i));
// Remove duplicates from the list, there's no use for duplicated
// paths in XDG_DATA_DIRS - if it's not found in the given
// directory the first time, it won't be there the second time.
// Plus duplicate paths causes problems for example for mimetypes,
// where duplicate paths here lead to duplicated mime types returned
// for a file, eg "text/plain,text/plain" instead of "text/plain"
dirs.removeDuplicates();
} }
return dirs; return dirs;
} }