On Tue, 23.12.14 13:47, Shawn Paul Landden (sh...@churchofgit.com) wrote: > There is alot of cleanup that will have to happen to turn on > -fstrict-aliasing, but I think our code should be "correct" to the > rule.
Applied with some minor changes! (we try to use _t only for things that actually feel like types, you'd pass around via call-by-value, not call-by-ref...) Thanks! > --- > src/core/mount.c | 4 ++-- > src/core/path.c | 4 ++-- > src/journal/sd-journal.c | 4 ++-- > src/shared/util.c | 5 ++--- > src/shared/util.h | 10 ++++++++-- > src/udev/udevd.c | 4 ++-- > 6 files changed, 18 insertions(+), 13 deletions(-) > > diff --git a/src/core/mount.c b/src/core/mount.c > index f8731bb..18ee2a0 100644 > --- a/src/core/mount.c > +++ b/src/core/mount.c > @@ -1701,11 +1701,11 @@ static int mount_dispatch_io(sd_event_source *source, > int fd, uint32_t revents, > * internal behaviour of libmount here. */ > > for (;;) { > - uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct > inotify_event); > + inotify_event_buffer_t buffer; > struct inotify_event *e; > ssize_t l; > > - l = read(fd, buffer, sizeof(buffer)); > + l = read(fd, buffer.raw, sizeof(buffer.raw)); > if (l < 0) { > if (errno == EAGAIN || errno == EINTR) > break; > diff --git a/src/core/path.c b/src/core/path.c > index 656ed69..bc34f66 100644 > --- a/src/core/path.c > +++ b/src/core/path.c > @@ -157,7 +157,7 @@ void path_spec_unwatch(PathSpec *s) { > } > > int path_spec_fd_event(PathSpec *s, uint32_t revents) { > - uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct inotify_event); > + inotify_event_buffer_t buffer; > struct inotify_event *e; > ssize_t l; > int r = 0; > @@ -167,7 +167,7 @@ int path_spec_fd_event(PathSpec *s, uint32_t revents) { > return -EINVAL; > } > > - l = read(s->inotify_fd, buffer, sizeof(buffer)); > + l = read(s->inotify_fd, buffer.raw, sizeof(buffer.raw)); > if (l < 0) { > if (errno == EAGAIN || errno == EINTR) > return 0; > diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c > index d46dc3c..5f65116 100644 > --- a/src/journal/sd-journal.c > +++ b/src/journal/sd-journal.c > @@ -2188,11 +2188,11 @@ _public_ int sd_journal_process(sd_journal *j) { > j->last_process_usec = now(CLOCK_MONOTONIC); > > for (;;) { > - uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct > inotify_event); > + inotify_event_buffer_t buffer; > struct inotify_event *e; > ssize_t l; > > - l = read(j->inotify_fd, buffer, sizeof(buffer)); > + l = read(j->inotify_fd, buffer.raw, sizeof(buffer.raw)); > if (l < 0) { > if (errno == EAGAIN || errno == EINTR) > return got_something ? determine_change(j) : > SD_JOURNAL_NOP; > diff --git a/src/shared/util.c b/src/shared/util.c > index 06b6077..2fbcdab 100644 > --- a/src/shared/util.c > +++ b/src/shared/util.c > @@ -39,7 +39,6 @@ > #include <linux/tiocl.h> > #include <termios.h> > #include <stdarg.h> > -#include <sys/inotify.h> > #include <sys/poll.h> > #include <ctype.h> > #include <sys/prctl.h> > @@ -2106,7 +2105,7 @@ int acquire_terminal( > assert(notify >= 0); > > for (;;) { > - uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct > inotify_event); > + inotify_event_buffer_t buffer; > struct inotify_event *e; > ssize_t l; > > @@ -2129,7 +2128,7 @@ int acquire_terminal( > } > } > > - l = read(notify, buffer, sizeof(buffer)); > + l = read(notify, buffer.raw, sizeof(buffer.raw)); > if (l < 0) { > if (errno == EINTR || errno == EAGAIN) > continue; > diff --git a/src/shared/util.h b/src/shared/util.h > index 1804b8c..e9af32a 100644 > --- a/src/shared/util.h > +++ b/src/shared/util.h > @@ -42,6 +42,7 @@ > #include <locale.h> > #include <mntent.h> > #include <sys/socket.h> > +#include <sys/inotify.h> > > #if SIZEOF_PID_T == 4 > # define PID_FMT "%" PRIu32 > @@ -1047,8 +1048,13 @@ int sethostname_idempotent(const char *s); > #define INOTIFY_EVENT_MAX (sizeof(struct inotify_event) + NAME_MAX + 1) > > #define FOREACH_INOTIFY_EVENT(e, buffer, sz) \ > - for ((e) = (struct inotify_event*) (buffer); \ > - (uint8_t*) (e) < (uint8_t*) (buffer) + (sz); \ > + for ((e) = (struct inotify_event*) (&buffer.ev); \ > + (uint8_t*) (e) < (uint8_t*) (buffer.raw) + (sz); \ > (e) = (struct inotify_event*) ((uint8_t*) (e) + sizeof(struct > inotify_event) + (e)->len)) > > +typedef union { > + struct inotify_event ev; > + uint8_t raw[INOTIFY_EVENT_MAX]; > +} inotify_event_buffer_t; > + > #define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), > AT_SYMLINK_NOFOLLOW) > diff --git a/src/udev/udevd.c b/src/udev/udevd.c > index 8bec03e..b07dff8 100644 > --- a/src/udev/udevd.c > +++ b/src/udev/udevd.c > @@ -816,11 +816,11 @@ static int synthesize_change(struct udev_device *dev) { > } > > static int handle_inotify(struct udev *udev) { > - uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct inotify_event); > + inotify_event_buffer_t buffer; > struct inotify_event *e; > ssize_t l; > > - l = read(fd_inotify, buffer, sizeof(buffer)); > + l = read(fd_inotify, buffer.raw, sizeof(buffer.raw)); > if (l < 0) { > if (errno == EAGAIN || errno == EINTR) > return 0; > -- > 2.1.0 > > _______________________________________________ > systemd-devel mailing list > systemd-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/systemd-devel Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel