int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, const char* filename, uv_fs_event_cb cb, int flags) { int events; int fd; loop->counters.fs_event_init++; /* We don't support any flags yet. */ assert(!flags); /* * TODO share a single inotify fd across the event loop? * We'll run into fs.inotify.max_user_instances if we * keep creating new inotify fds. */ if ((fd = new_inotify_fd()) == -1) { uv__set_sys_error(loop, errno); return -1; } events = IN_ATTRIB | IN_CREATE | IN_MODIFY | IN_DELETE | IN_DELETE_SELF | IN_MOVED_FROM | IN_MOVED_TO; if (inotify_add_watch(fd, filename, events) == -1) { uv__set_sys_error(loop, errno); uv__close(fd); return -1; } uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); handle->filename = strdup(filename); /* this should go! */ handle->cb = cb; handle->fd = fd; ev_io_init(&handle->read_watcher, uv__inotify_read, fd, EV_READ); ev_io_start(loop->ev, &handle->read_watcher); ev_unref(loop->ev); return 0; }
static int init_inotify(uv_loop_t* loop) { int err; if (loop->inotify_fd != -1) return 0; err = new_inotify_fd(); if (err < 0) return err; loop->inotify_fd = err; uv__io_init(&loop->inotify_read_watcher, uv__inotify_read, loop->inotify_fd); uv__io_start(loop, &loop->inotify_read_watcher, UV__POLLIN); return 0; }
static int init_inotify(uv_loop_t* loop) { if (loop->inotify_fd != -1) return 0; loop->inotify_fd = new_inotify_fd(); if (loop->inotify_fd == -1) { uv__set_sys_error(loop, errno); return -1; } ev_io_init(&loop->inotify_read_watcher, uv__inotify_read, loop->inotify_fd, EV_READ); ev_io_start(loop->ev, &loop->inotify_read_watcher); return 0; }