QNX: Use inotify on QNX systems that support it

Change-Id: Ia9bf8d3c202b17746036e203268ef6229aaa900d
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
bb10
Thomas McGuire 2012-08-15 15:53:43 +02:00 committed by The Qt Project
parent 9f390bb686
commit fc0cbef595
4 changed files with 19 additions and 3 deletions

View File

@ -124,7 +124,7 @@ win32 {
SOURCES += io/qstandardpaths_unix.cpp
}
linux-* {
linux-*|if(qnx:contains(QT_CONFIG, inotify)) {
SOURCES += io/qfilesystemwatcher_inotify.cpp
HEADERS += io/qfilesystemwatcher_inotify_p.h
}

View File

@ -51,11 +51,14 @@
#include <qset.h>
#include <qtimer.h>
#if defined(Q_OS_LINUX) || (defined(Q_OS_QNX) && !defined(QT_NO_INOTIFY))
#define USE_INOTIFY
#endif
#include "qfilesystemwatcher_polling_p.h"
#if defined(Q_OS_WIN)
# include "qfilesystemwatcher_win_p.h"
#elif defined(Q_OS_LINUX)
#elif defined(USE_INOTIFY)
# include "qfilesystemwatcher_inotify_p.h"
#elif defined(Q_OS_FREEBSD) || defined(Q_OS_MAC)
# include "qfilesystemwatcher_kqueue_p.h"
@ -67,7 +70,7 @@ QFileSystemWatcherEngine *QFileSystemWatcherPrivate::createNativeEngine(QObject
{
#if defined(Q_OS_WIN)
return new QWindowsFileSystemWatcherEngine(parent);
#elif defined(Q_OS_LINUX)
#elif defined(USE_INOTIFY)
// there is a chance that inotify may fail on Linux pre-2.6.13 (August
// 2005), so we can't just new inotify directly.
return QInotifyFileSystemWatcherEngine::create(parent);

View File

@ -52,12 +52,20 @@
#include <qsocketnotifier.h>
#include <qvarlengtharray.h>
#if defined(Q_OS_LINUX)
#include <sys/syscall.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#endif
#if defined(QT_NO_INOTIFY)
#if defined(Q_OS_QNX)
// These files should only be compiled on QNX if the inotify headers are found
#error "Should not get here."
#endif
#include <linux/types.h>
#if defined(__i386__)

View File

@ -183,6 +183,9 @@ void tst_QFileSystemWatcher::basicTest()
// change the permissions, should get a signal from the watcher
testFile.setPermissions(QFile::ReadOwner);
// IN_ATTRIB doesn't work on QNX, so skip this test
#if !defined(Q_OS_QNX)
// waiting max 5 seconds for notification for file permission modification to trigger
QTRY_COMPARE(changedSpy.count(), 1);
QCOMPARE(changedSpy.at(0).count(), 1);
@ -190,6 +193,8 @@ void tst_QFileSystemWatcher::basicTest()
fileName = changedSpy.at(0).at(0).toString();
QCOMPARE(fileName, testFile.fileName());
#endif
changedSpy.clear();
// remove the watch and modify file permissions, should not get a signal from the watcher