60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#include "INotify.h"
|
|
#include "Log.h"
|
|
#include "ZString.h"
|
|
|
|
namespace core {
|
|
|
|
INotify::INotify(EPoll &ePoll) : Socket(ePoll, "INotify") {
|
|
setDescriptor(inotify_init());
|
|
}
|
|
|
|
INotify::~INotify() {
|
|
shutdown();
|
|
}
|
|
|
|
int INotify::addWatch(coreutils::ZString &watch) {
|
|
return inotify_add_watch(getDescriptor(), watch.c_str(), IN_ALL_EVENTS);
|
|
}
|
|
|
|
void INotify::removeWatch(int wd) {
|
|
inotify_rm_watch(getDescriptor(), wd);
|
|
}
|
|
|
|
void INotify::onDataReceived(coreutils::ZString &buffer) {
|
|
const struct inotify_event *event;
|
|
char *ptr;
|
|
for (ptr = buffer.getData();
|
|
ptr < buffer.getData() + buffer.getLength();
|
|
ptr += sizeof(struct inotify_event) + event->len) {
|
|
event = (const struct inotify_event *) ptr;
|
|
coreutils::ZString name(event->name);
|
|
|
|
if(event->mask & IN_ACCESS)
|
|
inAccess(name);
|
|
if(event->mask & IN_ATTRIB)
|
|
inAttrib(std::string(event->name));
|
|
if(event->mask & IN_CLOSE_WRITE)
|
|
inCloseWrite(std::string(event->name));
|
|
if(event->mask & IN_CLOSE_NOWRITE)
|
|
inCloseNoWrite(std::string(event->name));
|
|
if(event->mask & IN_CREATE)
|
|
inCreate(name);
|
|
if(event->mask & IN_DELETE)
|
|
inDelete(std::string(event->name));
|
|
if(event->mask & IN_DELETE_SELF)
|
|
inDeleteSelf(std::string(event->name));
|
|
if(event->mask & IN_MODIFY)
|
|
inModify(std::string(event->name));
|
|
if(event->mask & IN_MOVE_SELF)
|
|
inMoveSelf(std::string(event->name));
|
|
if(event->mask & IN_MOVED_FROM)
|
|
inMovedFrom(std::string(event->name));
|
|
if(event->mask & IN_MOVED_TO)
|
|
inMovedTo(std::string(event->name));
|
|
if(event->mask & IN_OPEN)
|
|
inOpen(std::string(event->name));
|
|
}
|
|
}
|
|
|
|
}
|