int ReadEvents() { wxCHECK_MSG( IsOk(), -1, "Inotify not initialized or invalid inotify descriptor" ); // read events // TODO differentiate depending on params char buf[128 * sizeof(inotify_event)]; int left = ReadEventsToBuf(buf, sizeof(buf)); if (left == -1) return -1; // left > 0, we have events char* memory = buf; int event_count = 0; while (left > 0) // OPT checking 'memory' would suffice { event_count++; inotify_event* e = (inotify_event*)memory; // process one inotify_event ProcessNativeEvent(*e); int offset = sizeof(inotify_event) + e->len; left -= offset; memory += offset; } // take care of unmatched renames ProcessRenames(); wxLogTrace(wxTRACE_FSWATCHER, "We had %d native events", event_count); return event_count; }
// return true if there was no error, false on error bool ReadEvents() { wxCHECK_MSG( IsOk(), false, "Kqueue not initialized or invalid kqueue descriptor" ); // read events do { struct kevent event; struct timespec timeout = {0, 0}; int ret = kevent(m_kfd, NULL, 0, &event, 1, &timeout); if (ret == -1) { wxLogSysError(_("Unable to get events from kqueue")); return false; } else if (ret == 0) { return true; } // we have event, so process it ProcessNativeEvent(event); } while (true); // when ret>0 we still have events, when ret<=0 we return wxFAIL_MSG( "Never reached" ); return true; }