Commit df7cc8a3de4bb0fe4cbb72b5db27fd77946fd0b6
1 parent
ab2e59a7
remove dynamic allocation... also the previous stuff did not work correctly anymore.
Showing
1 changed file
with
26 additions
and
37 deletions
| 1 | #include <stdio.h> | 1 | #include <stdio.h> |
| 2 | #include <errno.h> | 2 | #include <errno.h> |
| 3 | -#include <string.h> | ||
| 4 | -#include <sys/ioctl.h> | 3 | +#include <limits.h> |
| 5 | #include <sys/select.h> | 4 | #include <sys/select.h> |
| 6 | 5 | ||
| 7 | #include <inotify.h> | 6 | #include <inotify.h> |
| 8 | 7 | ||
| 8 | +#define BUF_LEN (10 * (sizeof(struct inotify_event) + NAME_MAX + 1)) | ||
| 9 | + | ||
| 9 | int | 10 | int |
| 10 | main (int arg, char * argv []) | 11 | main (int arg, char * argv []) |
| 11 | { | 12 | { |
| @@ -35,39 +36,31 @@ main (int arg, char * argv []) | @@ -35,39 +36,31 @@ main (int arg, char * argv []) | ||
| 35 | 36 | ||
| 36 | while (sel_ret = select (notify_d+1, &rfds, NULL, NULL, NULL)) | 37 | while (sel_ret = select (notify_d+1, &rfds, NULL, NULL, NULL)) |
| 37 | { | 38 | { |
| 38 | - char * in_ev = NULL; | ||
| 39 | - struct inotify_event * act_ev = NULL; | ||
| 40 | - size_t size = 0; | ||
| 41 | - size_t size_avail; | ||
| 42 | - char * ev_name = NULL; | ||
| 43 | - | ||
| 44 | - ioctl (notify_d, FIONREAD, &size_avail); | ||
| 45 | - in_ev = (char *)malloc (size_avail); | ||
| 46 | - if (in_ev == NULL) | 39 | + ssize_t numRead; |
| 40 | + char buf[BUF_LEN] __attribute__ ((aligned(8))); | ||
| 41 | + char * p; | ||
| 42 | + struct inotify_event *event; | ||
| 43 | + char * ev_name = NULL; | ||
| 44 | + | ||
| 45 | + numRead = read(notify_d, buf, BUF_LEN); | ||
| 46 | + | ||
| 47 | + if (numRead == 0) | ||
| 47 | { | 48 | { |
| 48 | - perror ("could not get memory for event list"); | ||
| 49 | - return 4; | 49 | + perror("read() from inotify fd returned 0!"); |
| 50 | + return 3; | ||
| 50 | } | 51 | } |
| 51 | - memset (in_ev, 0, size_avail); | ||
| 52 | 52 | ||
| 53 | - while (size < size_avail) | 53 | + if (numRead == -1) |
| 54 | { | 54 | { |
| 55 | - int got = read (notify_d, in_ev + size, | ||
| 56 | - size_avail - size); | ||
| 57 | - if (got == 0) | ||
| 58 | - { | ||
| 59 | - perror ("notify FD was closed unexpectedly"); | ||
| 60 | - return 3; | ||
| 61 | - } | ||
| 62 | - size += got; | 55 | + perror("read"); |
| 56 | + return 3; | ||
| 63 | } | 57 | } |
| 64 | 58 | ||
| 65 | - for (act_ev = (struct inotify_event *) in_ev; | ||
| 66 | - (char *) act_ev < in_ev + size_avail && IN_NO_EVENT (act_ev); | ||
| 67 | - act_ev = IN_NEXT_EVENT (act_ev)) | 59 | + for (p = buf; p < buf + numRead; ) |
| 68 | { | 60 | { |
| 69 | - printf ("Watch Descriptor: %d\n", act_ev->wd); | ||
| 70 | - switch (act_ev->mask) | 61 | + event = (struct inotify_event *) p; |
| 62 | + printf ("Watch Descriptor: %d\n", event->wd); | ||
| 63 | + switch (event->mask) | ||
| 71 | { | 64 | { |
| 72 | case IN_ACCESS: | 65 | case IN_ACCESS: |
| 73 | ev_name = "IN_ACCESS"; break; | 66 | ev_name = "IN_ACCESS"; break; |
| @@ -94,16 +87,12 @@ main (int arg, char * argv []) | @@ -94,16 +87,12 @@ main (int arg, char * argv []) | ||
| 94 | case IN_OPEN: | 87 | case IN_OPEN: |
| 95 | ev_name = "IN_OPEN"; break; | 88 | ev_name = "IN_OPEN"; break; |
| 96 | } | 89 | } |
| 97 | - printf ("Mask of Events: %s(%d)\n", ev_name, act_ev->mask); | ||
| 98 | - printf ("Events Cookie: %u\n", act_ev->cookie); | ||
| 99 | - printf ("Length of name: %u\n", act_ev->len); | ||
| 100 | - printf ("Event Name: %s\n", act_ev->name); | ||
| 101 | - } | 90 | + printf ("Mask of Events: %s(%d)\n", ev_name, event->mask); |
| 91 | + printf ("Events Cookie: %u\n", event->cookie); | ||
| 92 | + printf ("Length of name: %u\n", event->len); | ||
| 93 | + printf ("Event Name: %s\n", event->name); | ||
| 102 | 94 | ||
| 103 | - if (in_ev) | ||
| 104 | - { | ||
| 105 | - free (in_ev); | ||
| 106 | - in_ev = NULL; | 95 | + p += sizeof(struct inotify_event) + event->len; |
| 107 | } | 96 | } |
| 108 | 97 | ||
| 109 | puts ("---"); | 98 | puts ("---"); |
Please
register
or
login
to post a comment