X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Funix%2Ffilemonitor.cpp;fp=source%2Ffs%2Funix%2Ffilemonitor.cpp;h=11b2a8d74b1705ba4b16c38d447e7c8e9516fdb7;hp=e2ca3b74ebcde44bcc85f562e67ea20d989074a4;hb=f24e7b96e76b63c9b9b8a6bce4c7a9db64276ea8;hpb=9f754b788b872f9768af8c3a4f9e001a588e011a diff --git a/source/fs/unix/filemonitor.cpp b/source/fs/unix/filemonitor.cpp index e2ca3b7..11b2a8d 100644 --- a/source/fs/unix/filemonitor.cpp +++ b/source/fs/unix/filemonitor.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include "filemonitor.h" @@ -99,27 +100,26 @@ void FileMonitor::Private::events_available() for(unsigned i=0; i(event_buf+i); - for(vector::iterator j=monitor.files.begin(); j!=monitor.files.end(); ++j) - if(j->tag==event->wd) + auto j = find_member(monitor.files, event->wd, &MonitoredFile::tag); + if(j!=monitor.files.end()) + { + if(event->mask&IN_MODIFY) + j->modified = true; + if(((event->mask&IN_CLOSE_WRITE) && j->modified) || (event->mask&IN_DELETE_SELF)) { - if(event->mask&IN_MODIFY) - j->modified = true; - if(((event->mask&IN_CLOSE_WRITE) && j->modified) || (event->mask&IN_DELETE_SELF)) - { - j->modified = false; - changed_files.push_back(j->path); - } - if(event->mask&IN_IGNORED) - j->tag = -1; - break; + j->modified = false; + changed_files.push_back(j->path); } + if(event->mask&IN_IGNORED) + j->tag = -1; + } i += sizeof(struct inotify_event)+event->len; } - for(vector::const_iterator i=changed_files.begin(); i!=changed_files.end(); ++i) - monitor.signal_file_modified.emit(*i); + for(const FS::Path &p: changed_files) + monitor.signal_file_modified.emit(p); - for(vector::iterator j=monitor.files.begin(); j!=monitor.files.end(); ) + for(auto j=monitor.files.begin(); j!=monitor.files.end(); ) { if(j->tag==-1) monitor.files.erase(j++);