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 | 1 | #include <stdio.h> |
| 2 | 2 | #include <errno.h> |
| 3 | -#include <string.h> | |
| 4 | -#include <sys/ioctl.h> | |
| 3 | +#include <limits.h> | |
| 5 | 4 | #include <sys/select.h> |
| 6 | 5 | |
| 7 | 6 | #include <inotify.h> |
| 8 | 7 | |
| 8 | +#define BUF_LEN (10 * (sizeof(struct inotify_event) + NAME_MAX + 1)) | |
| 9 | + | |
| 9 | 10 | int |
| 10 | 11 | main (int arg, char * argv []) |
| 11 | 12 | { |
| ... | ... | @@ -35,39 +36,31 @@ main (int arg, char * argv []) |
| 35 | 36 | |
| 36 | 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 | 65 | case IN_ACCESS: |
| 73 | 66 | ev_name = "IN_ACCESS"; break; |
| ... | ... | @@ -94,16 +87,12 @@ main (int arg, char * argv []) |
| 94 | 87 | case IN_OPEN: |
| 95 | 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 | 98 | puts ("---"); | ... | ... |
Please
register
or
login
to post a comment