summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoão Abecasis <joao@abecasis.name>2009-10-16 16:08:30 (GMT)
committerJoão Abecasis <joao@trolltech.com>2010-03-23 11:59:33 (GMT)
commit7986ab58b9a5d0828291c857d3ce86bfa1af4e6e (patch)
treeddfe4c2c06893bfa9b7fe21b2ed05ea9b34c2b5c /src
parent5f3cf10427640b3578c291e93374c04d9122ddb3 (diff)
downloadQt-7986ab58b9a5d0828291c857d3ce86bfa1af4e6e.zip
Qt-7986ab58b9a5d0828291c857d3ce86bfa1af4e6e.tar.gz
Qt-7986ab58b9a5d0828291c857d3ce86bfa1af4e6e.tar.bz2
_close(fd) closes the associated handle and not the other way around
... according to the online MSDN documentation. Hid the cachedFd member in private data under WinCE, since it's never used there. Task-number: QTBUG-9085 Reviewed-by: Zeno Albisser
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qfsfileengine.cpp2
-rw-r--r--src/corelib/io/qfsfileengine_p.h4
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp18
3 files changed, 22 insertions, 2 deletions
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 5e14804..a1ffb81 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -126,8 +126,10 @@ void QFSFileEnginePrivate::init()
fileAttrib = INVALID_FILE_ATTRIBUTES;
fileHandle = INVALID_HANDLE_VALUE;
mapHandle = INVALID_HANDLE_VALUE;
+#ifndef Q_OS_WINCE
cachedFd = -1;
#endif
+#endif
}
/*!
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index d07c3a0..55c779e 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -112,7 +112,11 @@ public:
HANDLE fileHandle;
HANDLE mapHandle;
QHash<uchar *, DWORD /* offset % AllocationGranularity */> maps;
+
+#ifndef Q_OS_WINCE
mutable int cachedFd;
+#endif
+
mutable DWORD fileAttrib;
#else
QHash<uchar *, QPair<int /*offset % PageSize*/, size_t /*length + offset % PageSize*/> > maps;
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 8d34486..9fc8dc3 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -450,13 +450,27 @@ bool QFSFileEnginePrivate::nativeClose()
// Windows native mode.
bool ok = true;
+
+#ifndef Q_OS_WINCE
+ if (cachedFd != -1) {
+ if (::_close(cachedFd) && !::CloseHandle(fileHandle)) {
+ q->setError(QFile::UnspecifiedError, qt_error_string());
+ ok = false;
+ }
+
+ // System handle is closed with associated file descriptor.
+ fileHandle = INVALID_HANDLE_VALUE;
+ cachedFd = -1;
+
+ return ok;
+ }
+#endif
+
if ((fileHandle == INVALID_HANDLE_VALUE || !::CloseHandle(fileHandle))) {
q->setError(QFile::UnspecifiedError, qt_error_string());
ok = false;
}
fileHandle = INVALID_HANDLE_VALUE;
- cachedFd = -1; // gets closed by CloseHandle above
-
return ok;
}