X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ffs%2Funix%2Ffilemonitor.cpp;h=11b2a8d74b1705ba4b16c38d447e7c8e9516fdb7;hb=44da9fc9afb6b7e49c1558c5572213a1e6f401e8;hp=68cd7aebda419752bfcab37f51f451421a185049;hpb=c8bf2d6c15893ccc9dbc4e04611b7229029f4808;p=libs%2Fcore.git diff --git a/source/fs/unix/filemonitor.cpp b/source/fs/unix/filemonitor.cpp index 68cd7ae..11b2a8d 100644 --- a/source/fs/unix/filemonitor.cpp +++ b/source/fs/unix/filemonitor.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include "filemonitor.h" @@ -98,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++);