Fix check if example location is writable on Windows

The normal permission check done by QFileInfo is not sufficient in many
cases.

Task-number: QTCREATORBUG-18184
Change-Id: Icab92c592e6d3c8610304e0b987eded6142f4ab3
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2017-05-24 15:31:40 +02:00
parent 2307e4d2cc
commit a834c5104d
2 changed files with 36 additions and 5 deletions

View File

@@ -49,6 +49,11 @@ class QWidget;
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug dbg, const Utils::FileName &c);
// for withNTFSPermissions
#ifdef Q_OS_WIN
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#endif
QT_END_NAMESPACE
namespace Utils {
@@ -121,6 +126,28 @@ public:
static QString resolvePath(const QString &baseDir, const QString &fileName);
};
// for actually finding out if e.g. directories are writable on Windows
#ifdef Q_OS_WIN
template <typename T>
static T withNTFSPermissions(const std::function<T()> &task)
{
qt_ntfs_permission_lookup++;
T result = task();
qt_ntfs_permission_lookup--;
return result;
}
#else // Q_OS_WIN
template <typename T>
static T withNTFSPermissions(const std::function<T()> &task)
{
return task();
}
#endif // Q_OS_WIN
class QTCREATOR_UTILS_EXPORT FileReader
{
Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic!