aboutsummaryrefslogtreecommitdiff
path: root/inotify_c.c
diff options
context:
space:
mode:
Diffstat (limited to 'inotify_c.c')
-rw-r--r--inotify_c.c16
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;
}