diff options
author | João Abecasis <joao@abecasis.name> | 2009-10-16 16:08:30 (GMT) |
---|---|---|
committer | João Abecasis <joao@trolltech.com> | 2010-03-23 11:59:33 (GMT) |
commit | 7986ab58b9a5d0828291c857d3ce86bfa1af4e6e (patch) | |
tree | ddfe4c2c06893bfa9b7fe21b2ed05ea9b34c2b5c /tests/auto/qfile/tst_qfile.cpp | |
parent | 5f3cf10427640b3578c291e93374c04d9122ddb3 (diff) | |
download | Qt-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 'tests/auto/qfile/tst_qfile.cpp')
-rw-r--r-- | tests/auto/qfile/tst_qfile.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index f407b12..8722a86 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -196,6 +196,7 @@ private slots: void miscWithUncPathAsCurrentDir(); void standarderror(); void handle(); + void nativeHandleLeaks(); void readEof_data(); void readEof(); @@ -392,6 +393,7 @@ void tst_QFile::cleanupTestCase() QFile::remove("resources"); QFile::remove("qfile_map_testfile"); QFile::remove("readAllBuffer.txt"); + QFile::remove("qt_file.tmp"); } //------------------------------------------ @@ -2538,6 +2540,51 @@ void tst_QFile::handle() #endif } +void tst_QFile::nativeHandleLeaks() +{ + int fd1, fd2; + +#ifdef Q_OS_WIN + HANDLE handle1, handle2; +#endif + + { + QFile file("qt_file.tmp"); + QVERIFY( file.open(QIODevice::ReadWrite) ); + + fd1 = file.handle(); + QVERIFY( -1 != fd1 ); + } + +#ifdef Q_OS_WIN + handle1 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + QVERIFY( INVALID_HANDLE_VALUE != handle1 ); + QVERIFY( ::CloseHandle(handle1) ); +#endif + + { + QFile file("qt_file.tmp"); + QVERIFY( file.open(QIODevice::ReadOnly) ); + + fd2 = file.handle(); + QVERIFY( -1 != fd2 ); + } + +#ifdef Q_OS_WIN + handle2 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + QVERIFY( INVALID_HANDLE_VALUE != handle2 ); + QVERIFY( ::CloseHandle(handle2) ); +#endif + + QCOMPARE( fd2, fd1 ); + +#ifdef Q_OS_WIN + QCOMPARE( handle2, handle1 ); +#endif +} + void tst_QFile::readEof_data() { QTest::addColumn<QString>("filename"); |