From 1898c4dbff69683cbe6510e9b0fec0ff580a4108 Mon Sep 17 00:00:00 2001
From: Mathias Gumz <akira at fluxbox org>
Date: Thu, 9 Apr 2009 15:54:30 +0200
Subject: [PATCH] bugfix for windows: trying to open files stored on network
 drives relied on QFileInfo::isWritable() without using the real filesystem
 checks

---
 src/plugins/texteditor/basetextdocument.cpp | 27 +++++++++++++++------
 1 file changed, 19 insertions(+), 8 deletions(-)
 mode change 100644 => 100755 src/plugins/texteditor/basetextdocument.cpp

diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
old mode 100644
new mode 100755
index 07f0ce46260..92b7f2a4cdb
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -47,6 +47,8 @@
 
 using namespace TextEditor;
 
+extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
+
 #if defined (Q_OS_WIN)
 # define NATIVE_LINE_TERMINATOR CRLFLineTerminator
 #else
@@ -140,8 +142,21 @@ bool BaseTextDocument::isReadOnly() const
         return true;
     if (m_fileName.isEmpty()) //have no corresponding file, so editing is ok
         return false;
+
     const QFileInfo fi(m_fileName);
-    return !fi.isWritable();
+
+#ifdef Q_OS_WIN32
+    // be careful when getting info from files on network drives
+    int old_ntfs_permission_lookup = qt_ntfs_permission_lookup;
+    qt_ntfs_permission_lookup = 1;
+#endif
+
+    const int ro = !fi.isWritable();
+
+#ifdef Q_OS_WIN32
+    qt_ntfs_permission_lookup = old_ntfs_permission_lookup;
+#endif
+    return ro;
 }
 
 bool BaseTextDocument::isModified() const
@@ -163,13 +178,9 @@ bool BaseTextDocument::open(const QString &fileName)
         if (!fi.isReadable())
             return false;
 
-        if (!fi.isWritable()) {
-            if (!file.open(QIODevice::ReadOnly))
-                return false;
-        } else {
-            if (!file.open(QIODevice::ReadWrite))
-                return false;
-        }
+        if (!file.open(QIODevice::ReadWrite) && !file.open(QIODevice::ReadOnly))
+            return false;
+
         title = fi.fileName();
 
         QByteArray buf = file.readAll();
-- 
GitLab