diff options
Diffstat (limited to 'inotify_c.c')
-rw-r--r-- | inotify_c.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/inotify_c.c b/inotify_c.c index f178fa6..c81f57d 100644 --- a/inotify_c.c +++ b/inotify_c.c @@ -54,9 +54,11 @@ void clean_poll(int fd, int *re_nrevents, int *re_fd) { static CleanStringVariable(wds_string, 1024); static CleanStringVariable(masks_string, 1024); +static CleanStringVariable(names_string, 4096); void clean_inotify_check(int fd, - int *re_ok, CleanString* re_wds, CleanString* re_masks, int *re_fd) { + int *re_ok, CleanString* re_wds, CleanString* re_masks, + CleanString* re_fnames, int *re_fd) { char buf[4096] __attribute__((aligned(__alignof__(struct inotify_event)))); const struct inotify_event *ev; ssize_t len; @@ -67,17 +69,20 @@ void clean_inotify_check(int fd, char *wds_ptr = CleanStringCharacters(wds_string); char *masks_ptr = CleanStringCharacters(masks_string); + char *names_ptr = CleanStringCharacters(names_string); CleanStringLength(wds_string) = 0; CleanStringLength(masks_string) = 0; + CleanStringLength(names_string) = 0; *re_ok = 0; *re_fd = fd; *re_wds = (CleanString) &empty_string; *re_masks = (CleanString) &empty_string; + *re_fnames = (CleanString) &empty_string; for (;;) { - poll_n = poll(&pfd, 1, 50); + poll_n = poll(&pfd, 1, 0); if (poll_n < 0) { return; } else if (poll_n == 0) { @@ -103,11 +108,18 @@ void clean_inotify_check(int fd, memcpy(wds_ptr, &ev->wd, sizeof(int)); wds_ptr += sizeof(int); CleanStringLength(wds_string) += sizeof(int); + + int len = strlen(ev->name); + memcpy(names_ptr, &ev->name, len); + names_ptr += len + 1; + *(names_ptr - 1) = '\00'; + CleanStringLength(names_string) += len + 1; } } *re_wds = (CleanString) wds_string; *re_masks = (CleanString) masks_string; + *re_fnames = (CleanString) names_string; *re_ok = 1; } |