Windows: Do not try to save files with reserved names

Do not try to save files with reserved names on windows. Doing so triggers
an assert in Qt.

Provide a nice warning instead.

Task-number: QTCREATORBUG-16984
Change-Id: I12be704f0aec0ab19b7f9f7023e9d28087dc30b1
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-10-07 10:34:40 +02:00
parent c1e3fd9f3e
commit 88bcd6a304

View File

@@ -471,6 +471,22 @@ bool FileSaverBase::setResult(QXmlStreamWriter *stream)
FileSaver::FileSaver(const QString &filename, QIODevice::OpenMode mode)
{
m_fileName = filename;
// Workaround an assert in Qt -- and provide a useful error message, too:
if (HostOsInfo::isWindowsHost()) {
// Taken from: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
static const QStringList reservedNames
= { "CON", "PRN", "AUX", "NUL",
"COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
"LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" };
const QString fn = QFileInfo(filename).baseName().toUpper();
for (const QString &rn : reservedNames) {
if (fn == rn) {
m_errorString = tr("%1: Is a reserved filename on Windows. Cannot save.").arg(filename);
m_hasError = true;
return;
}
}
}
if (mode & (QIODevice::ReadOnly | QIODevice::Append)) {
m_file = new QFile(filename);
m_isSafe = false;