Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Add flags to uv_fs_event_init
  • Loading branch information
piscisaureus committed Nov 5, 2011
1 parent faca140 commit 1997e10
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 15 deletions.
30 changes: 25 additions & 5 deletions include/uv.h
Expand Up @@ -1166,13 +1166,33 @@ struct uv_fs_event_s {
*/
UV_EXTERN void uv_loadavg(double avg[3]);


/*
* If filename is a directory then we will watch for all events in that
* directory. If filename is a file - we will only get events from that
* file. Subdirectories are not watched.
*/
* Flags to be passed to uv_fs_event_init.
*/
enum uv_fs_event_flags {
/*
* By default, if the fs event watcher is given a directory name, we will
* watch for all events in that directory. This flags overrides this behavior
* and makes fs_event report only changes to the directory entry itself. This
* flag does not affect individual files watched.
* This flag is currently not implemented yet on any backend.
*/
UV_FS_EVENT_WATCH_ENTRY = 1,

/*
* By default uv_fs_event will try to use a kernel interface such as inotify
* or kqueue to detect events. This may not work on remote filesystems such
* as NFS mounts. This flag makes fs_event fall back to calling stat() on a
* regular interval.
* This flag is currently not implemented yet on any backend.
*/
UV_FS_EVENT_STAT = 2
};


UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle,
const char* filename, uv_fs_event_cb cb);
const char* filename, uv_fs_event_cb cb, int flags);

/* Utility */

Expand Down
3 changes: 2 additions & 1 deletion src/unix/cygwin.c
Expand Up @@ -69,7 +69,8 @@ uint64_t uv_get_total_memory(void) {
int uv_fs_event_init(uv_loop_t* loop,
uv_fs_event_t* handle,
const char* filename,
uv_fs_event_cb cb) {
uv_fs_event_cb cb,
int flags) {
uv__set_sys_error(loop, ENOSYS);
return -1;
}
Expand Down
9 changes: 7 additions & 2 deletions src/unix/kqueue.c
Expand Up @@ -86,9 +86,13 @@ void uv__kqueue_hack(EV_P_ int fflags, ev_io *w) {
int uv_fs_event_init(uv_loop_t* loop,
uv_fs_event_t* handle,
const char* filename,
uv_fs_event_cb cb) {
uv_fs_event_cb cb,
int flags) {
int fd;

/* We don't support any flags yet. */
assert(!flags);

if (cb == NULL) {
uv__set_sys_error(loop, EINVAL);
return -1;
Expand Down Expand Up @@ -122,7 +126,8 @@ void uv__fs_event_destroy(uv_fs_event_t* handle) {
int uv_fs_event_init(uv_loop_t* loop,
uv_fs_event_t* handle,
const char* filename,
uv_fs_event_cb cb) {
uv_fs_event_cb cb,
int flags) {
uv__set_sys_error(loop, ENOSYS);
return -1;
}
Expand Down
6 changes: 5 additions & 1 deletion src/unix/linux.c
Expand Up @@ -156,10 +156,14 @@ static void uv__inotify_read(EV_P_ ev_io* w, int revents) {
int uv_fs_event_init(uv_loop_t* loop,
uv_fs_event_t* handle,
const char* filename,
uv_fs_event_cb cb) {
uv_fs_event_cb cb,
int flags) {
int flags;
int fd;

/* 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
Expand Down
6 changes: 5 additions & 1 deletion src/unix/sunos.c
Expand Up @@ -137,9 +137,13 @@ static void uv__fs_event_read(EV_P_ ev_io* w, int revents) {
int uv_fs_event_init(uv_loop_t* loop,
uv_fs_event_t* handle,
const char* filename,
uv_fs_event_cb cb) {
uv_fs_event_cb cb,
int flags) {
int portfd;

/* We don't support any flags yet. */
assert(!flags);

if ((portfd = port_create()) == -1) {
uv__set_sys_error(loop, errno);
return -1;
Expand Down
5 changes: 4 additions & 1 deletion src/win/fs-event.c
Expand Up @@ -133,12 +133,15 @@ static int uv_split_path(const wchar_t* filename, wchar_t** dir,


int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle,
const char* filename, uv_fs_event_cb cb) {
const char* filename, uv_fs_event_cb cb, int flags) {
int name_size;
DWORD attr, last_error;
wchar_t* dir = NULL, *dir_to_watch, *filenamew;
wchar_t short_path[MAX_PATH];

/* We don't support any flags yet. */
assert(!flags);

uv_fs_event_init_handle(loop, handle, filename, cb);

/* Convert name to UTF16. */
Expand Down
12 changes: 8 additions & 4 deletions test/test-fs-event.c
Expand Up @@ -144,7 +144,7 @@ TEST_IMPL(fs_event_watch_dir) {
uv_fs_rmdir(loop, &fs_req, "watch_dir", NULL);
create_dir(loop, "watch_dir");

r = uv_fs_event_init(loop, &fs_event, "watch_dir", fs_event_cb_dir);
r = uv_fs_event_init(loop, &fs_event, "watch_dir", fs_event_cb_dir, 0);
ASSERT(r != -1);
r = uv_timer_init(loop, &timer);
ASSERT(r != -1);
Expand Down Expand Up @@ -178,7 +178,7 @@ TEST_IMPL(fs_event_watch_file) {
create_file(loop, "watch_dir/file1");
create_file(loop, "watch_dir/file2");

r = uv_fs_event_init(loop, &fs_event, "watch_dir/file2", fs_event_cb_file);
r = uv_fs_event_init(loop, &fs_event, "watch_dir/file2", fs_event_cb_file, 0);
ASSERT(r != -1);
r = uv_timer_init(loop, &timer);
ASSERT(r != -1);
Expand Down Expand Up @@ -212,7 +212,7 @@ TEST_IMPL(fs_event_watch_file_current_dir) {
create_file(loop, "watch_file");

r = uv_fs_event_init(loop, &fs_event, "watch_file",
fs_event_cb_file_current_dir);
fs_event_cb_file_current_dir, 0);
ASSERT(r != -1);

r = uv_timer_init(loop, &timer);
Expand Down Expand Up @@ -248,7 +248,11 @@ TEST_IMPL(fs_event_no_callback_on_close) {
create_dir(loop, "watch_dir");
create_file(loop, "watch_dir/file1");

r = uv_fs_event_init(loop, &fs_event, "watch_dir/file1", fs_event_cb_file);
r = uv_fs_event_init(loop,
&fs_event,
"watch_dir/file1",
fs_event_cb_file,
0);
ASSERT(r != -1);

uv_close((uv_handle_t*)&fs_event, close_cb);
Expand Down

0 comments on commit 1997e10

Please sign in to comment.