diff options
Diffstat (limited to 'inotify_c.c')
-rw-r--r-- | inotify_c.c | 92 |
1 files changed, 40 insertions, 52 deletions
diff --git a/inotify_c.c b/inotify_c.c index 28432f2..5a6987b 100644 --- a/inotify_c.c +++ b/inotify_c.c @@ -1,17 +1,11 @@ #include <errno.h> -#include <fcntl.h> #include <poll.h> -#include <stdio.h> -#include <stdlib.h> #include <string.h> #include <sys/inotify.h> #include <unistd.h> #include "Clean.h" -/** The empty string, as a CleanString */ -static struct {int length; char chars[1]; } empty_string = {0,""}; - /** * Poll an inotify file descriptor * @@ -20,19 +14,20 @@ static struct {int length; char chars[1]; } empty_string = {0,""}; * re_nrevents Will be set to the number of polled events * re_fd Will be set to fd (needed for uniqueness) */ -void clean_poll(int fd, int timeout, int *re_nrevents, int *re_fd) { - struct pollfd pfd = {fd, POLLIN, 0}; - *re_nrevents = poll(&pfd, 1, timeout); - *re_fd = fd; +void clean_poll (int fd,int timeout,int *re_nrevents,int *re_fd) +{ + struct pollfd pfd={fd,POLLIN,0}; + *re_nrevents=poll (&pfd,1,timeout); + *re_fd=fd; } /** * CleanStrings that are returned from clean_inotify_check (so that we don't * have to malloc all the time.) */ -static CleanStringVariable(wds_string, 1024); -static CleanStringVariable(masks_string, 1024); -static CleanStringVariable(names_string, 4096); +static CleanStringVariable (wds_string,1024); +static CleanStringVariable (masks_string,1024); +static CleanStringVariable (names_string,4096); /** * Check for events on an inotify file descriptor. @@ -49,58 +44,55 @@ static CleanStringVariable(names_string, 4096); * at a time and casting that to an int. The string array can be read by * splitting on \0 (since they are filenames, \0 cannot occur). */ -void clean_inotify_check(int fd, - int *re_ok, CleanString* re_wds, CleanString* re_masks, - CleanString* re_fnames, int *re_fd) { +void clean_inotify_check (int 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; char *ptr; - struct pollfd pfd = {fd, POLLIN, 0}; + struct pollfd pfd={fd,POLLIN,0}; int poll_n; - 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; + 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_ok=0; + *re_fd=fd; - *re_wds = (CleanString) &empty_string; - *re_masks = (CleanString) &empty_string; - *re_fnames = (CleanString) &empty_string; + *re_wds=(CleanString) wds_string; + *re_masks=(CleanString) masks_string; + *re_fnames=(CleanString) names_string; - for (;;) { - poll_n = poll(&pfd, 1, 0); - if (poll_n < 0) { + for (;;){ + poll_n=poll (&pfd,1,0); + if (poll_n<0) return; - } else if (poll_n == 0) { + if (poll_n==0) break; - } - len = read(fd, buf, sizeof buf); - if (len == -1 && errno != EAGAIN) { + len=read (fd,buf,sizeof (buf)); + if (len==-1 && errno!=EAGAIN) return; - } - if (len <= 0) { + if (len<=0) break; - } - for (ptr = buf; ptr < buf + len; - ptr += sizeof(struct inotify_event) + ev->len) { - ev = (const struct inotify_event*) ptr; + for (ptr=buf; ptr<buf+len; ptr+=sizeof (struct inotify_event)+ev->len){ + ev=(const struct inotify_event*) ptr; - memcpy(masks_ptr, &ev->mask, 4); - masks_ptr += 4; - CleanStringLength(masks_string) += 4; + memcpy (masks_ptr,&ev->mask,4); + masks_ptr+=4; + CleanStringLength (masks_string)+=4; - memcpy(wds_ptr, &ev->wd, sizeof(int)); - wds_ptr += sizeof(int); - CleanStringLength(wds_string) += sizeof(int); + memcpy (wds_ptr,&ev->wd,sizeof (int)); + wds_ptr+=sizeof (int); + CleanStringLength (wds_string)+=sizeof (int); memcpy (names_ptr,&ev->name,ev->len); names_ptr+=ev->len+1; @@ -109,9 +101,5 @@ void clean_inotify_check(int fd, } } - *re_wds = (CleanString) wds_string; - *re_masks = (CleanString) masks_string; - *re_fnames = (CleanString) names_string; - - *re_ok = 1; + *re_ok=1; } |