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