From 54cafd9c6878a80771ccba098763db26752fa1c3 Mon Sep 17 00:00:00 2001 From: mheily Date: Sun, 22 May 2011 00:28:35 +0000 Subject: [PATCH] Add -Wextra to CFLAGS and fix all related warnings on Linux. This will also need to be done on Solaris. git-svn-id: svn://svn.code.sf.net/p/libkqueue/code/trunk@513 fb4e3144-bc1c-4b72-a658-5bcd248dd7f7 --- TODO | 6 ++++++ config.inc | 2 +- src/common/kevent.c | 10 +++++----- src/common/knote.c | 4 ++-- src/common/private.h | 2 +- src/linux/platform.c | 17 +++++++++++------ src/linux/read.c | 3 +++ src/linux/signal.c | 9 +++++---- src/linux/timer.c | 7 +++++-- src/linux/user.c | 13 +++++++++---- src/linux/vnode.c | 9 ++++++--- src/linux/write.c | 3 +++ src/posix/platform.c | 4 ++-- src/posix/platform.h | 4 ++++ 14 files changed, 63 insertions(+), 30 deletions(-) diff --git a/TODO b/TODO index 37e87b5..6ebb725 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,10 @@ + * Create a FILTER_DECL() macro that initializes the 'struct filter' object, + with all members properly initialized. Then -Wno-missing-field-initializers + can be removed from CFLAGS. + + * Implement the knote_modify() hook for all filters. + * Add a dbg_printf() statement within kevent_wait() to report the value of the timeout. diff --git a/config.inc b/config.inc index 6191d08..1a0c209 100644 --- a/config.inc +++ b/config.inc @@ -3,7 +3,7 @@ version="2.0a" abi_major="0" abi_minor="0" abi_version="$abi_major.$abi_minor" -cflags="-Wall -Werror -g -O2 -std=c99 -D_XOPEN_SOURCE=600" +cflags="-Wall -Wextra -Wno-missing-field-initializers -Werror -g -O2 -std=c99 -D_XOPEN_SOURCE=600" ldflags="" sources="src/common/filter.c src/common/knote.c src/common/map.c src/common/kevent.c src/common/kqueue.c" diff --git a/src/common/kevent.c b/src/common/kevent.c index 2b89e39..9a30b98 100644 --- a/src/common/kevent.c +++ b/src/common/kevent.c @@ -31,7 +31,7 @@ static const char * kevent_filter_dump(const struct kevent *kev) { - static char __thread buf[64]; + static __thread char buf[64]; snprintf(&buf[0], sizeof(buf), "%d (%s)", kev->filter, filter_name(kev->filter)); @@ -41,7 +41,7 @@ kevent_filter_dump(const struct kevent *kev) static const char * kevent_fflags_dump(const struct kevent *kev) { - static char __thread buf[1024]; + static __thread char buf[1024]; #define KEVFFL_DUMP(attrib) \ if (kev->fflags & attrib) \ @@ -74,7 +74,7 @@ kevent_fflags_dump(const struct kevent *kev) static const char * kevent_flags_dump(const struct kevent *kev) { - static char __thread buf[1024]; + static __thread char buf[1024]; #define KEVFL_DUMP(attrib) \ if (kev->flags & attrib) \ @@ -101,7 +101,7 @@ kevent_flags_dump(const struct kevent *kev) const char * kevent_dump(const struct kevent *kev) { - static char __thread buf[1024]; + static __thread char buf[1024]; snprintf((char *) &buf[0], sizeof(buf), "{ ident=%d, filter=%s, %s, %s, data=%d, udata=%p }", @@ -147,7 +147,7 @@ kevent_copyin_one(struct kqueue *kq, const struct kevent *src) kn->kn_kq = kq; assert(filt->kn_create); if (filt->kn_create(filt, kn) < 0) { - knote_release(filt, kn); + knote_release(kn); errno = EFAULT; return (-1); } diff --git a/src/common/knote.c b/src/common/knote.c index 14791b2..76b8c00 100644 --- a/src/common/knote.c +++ b/src/common/knote.c @@ -53,7 +53,7 @@ knote_new(void) } void -knote_release(struct filter *filt, struct knote *kn) +knote_release(struct knote *kn) { assert (kn->kn_ref > 0); @@ -114,7 +114,7 @@ knote_delete(struct filter *filt, struct knote *kn) kn->kn_flags |= KNFL_KNOTE_DELETED; - knote_release(filt, kn); + knote_release(kn); return (0); } diff --git a/src/common/private.h b/src/common/private.h index efa3292..161f587 100644 --- a/src/common/private.h +++ b/src/common/private.h @@ -189,7 +189,7 @@ struct knote * knote_lookup(struct filter *, short); //DEADWOOD: struct knote * knote_get_by_data(struct filter *filt, intptr_t); struct knote * knote_new(void); #define knote_retain(kn) atomic_inc(&kn->kn_ref) -void knote_release(struct filter *, struct knote *); +void knote_release(struct knote *); void knote_insert(struct filter *, struct knote *); int knote_delete(struct filter *, struct knote *); int knote_init(void); diff --git a/src/linux/platform.c b/src/linux/platform.c index 8b4f00f..e8f35ff 100644 --- a/src/linux/platform.c +++ b/src/linux/platform.c @@ -23,7 +23,7 @@ const struct filter evfilt_proc = EVFILT_NOTIMPL; * Per-thread epoll event buffer used to ferry data between * kevent_wait() and kevent_copyout(). */ -static struct epoll_event __thread epevt[MAX_KEVENT]; +static __thread struct epoll_event epevt[MAX_KEVENT]; const struct kqueue_vtable kqops = { linux_kqueue_init, @@ -80,7 +80,7 @@ linux_kqueue_init(struct kqueue *kq) } void -linux_kqueue_free(struct kqueue *kq) +linux_kqueue_free(struct kqueue *kq UNUSED) { abort();//FIXME } @@ -146,7 +146,7 @@ linux_kevent_wait( int linux_kevent_copyout(struct kqueue *kq, int nready, - struct kevent *eventlist, int nevents) + struct kevent *eventlist, int nevents UNUSED) { struct epoll_event *ev; struct filter *filt; @@ -247,11 +247,13 @@ int linux_eventfd_lower(struct eventfd *e) { uint64_t cur; + ssize_t n; int rv = 0; /* Reset the counter */ dbg_puts("lowering event level"); - if (read(e->ef_id, &cur, sizeof(cur)) < sizeof(cur)) { + n = read(e->ef_id, &cur, sizeof(cur)); + if (n < 0) { switch (errno) { case EAGAIN: /* Not considered an error */ @@ -265,7 +267,10 @@ linux_eventfd_lower(struct eventfd *e) dbg_printf("read(2): %s", strerror(errno)); rv = -1; } - } + } else if (n != sizeof(cur)) { + dbg_puts("short read"); + rv = -1; + } return (rv); } @@ -322,7 +327,7 @@ linux_get_descriptor_type(struct knote *kn) char * epoll_event_dump(struct epoll_event *evt) { - static char __thread buf[128]; + static __thread char buf[128]; if (evt == NULL) return "(null)"; diff --git a/src/linux/read.c b/src/linux/read.c index c81d167..7ec4f0c 100644 --- a/src/linux/read.c +++ b/src/linux/read.c @@ -191,6 +191,9 @@ int evfilt_read_knote_modify(struct filter *filt, struct knote *kn, const struct kevent *kev) { + (void) filt; + (void) kn; + (void) kev; return (-1); /* STUB */ } diff --git a/src/linux/signal.c b/src/linux/signal.c index 067cd96..341c176 100644 --- a/src/linux/signal.c +++ b/src/linux/signal.c @@ -24,7 +24,7 @@ signalfd_reset(int sigfd) /* Discard any pending signal */ n = read(sigfd, &sig, sizeof(sig)); - if (n < sizeof(sig)) { + if (n < 0 || n != sizeof(sig)) { if (errno == EWOULDBLOCK) return; //FIXME: eintr? @@ -94,7 +94,7 @@ errout: } int -evfilt_signal_copyout(struct kevent *dst, struct knote *src, void *unused) +evfilt_signal_copyout(struct kevent *dst, struct knote *src, void *x UNUSED) { int sigfd; @@ -128,8 +128,9 @@ evfilt_signal_knote_create(struct filter *filt, struct knote *kn) } int -evfilt_signal_knote_modify(struct filter *filt, struct knote *kn, - const struct kevent *kev) +evfilt_signal_knote_modify(struct filter *filt UNUSED, + struct knote *kn UNUSED, + const struct kevent *kev UNUSED) { /* Nothing to do since the signal number does not change. */ diff --git a/src/linux/timer.c b/src/linux/timer.c index 6b4d85e..90fe132 100644 --- a/src/linux/timer.c +++ b/src/linux/timer.c @@ -20,7 +20,7 @@ static char * itimerspec_dump(struct itimerspec *ts) { - static char __thread buf[1024]; + static __thread char buf[1024]; snprintf(buf, sizeof(buf), "itimer: [ interval=%lu s %lu ns, next expire=%lu s %lu ns ]", @@ -73,7 +73,7 @@ evfilt_timer_copyout(struct kevent *dst, struct knote *src, void *ptr) timer has been trigered. */ n = read(src->data.pfd, &expired, sizeof(expired)); - if (n < 0 || n < sizeof(expired)) { + if (n != sizeof(expired)) { dbg_puts("invalid read from timerfd"); expired = 1; /* Fail gracefully */ } @@ -122,6 +122,9 @@ int evfilt_timer_knote_modify(struct filter *filt, struct knote *kn, const struct kevent *kev) { + (void)filt; + (void)kn; + (void)kev; return (0); /* STUB */ } diff --git a/src/linux/user.c b/src/linux/user.c index 8415103..48f6181 100644 --- a/src/linux/user.c +++ b/src/linux/user.c @@ -61,11 +61,13 @@ static int eventfd_lower(int evfd) { uint64_t cur; + ssize_t n; int rv = 0; /* Reset the counter */ dbg_puts("lowering event level"); - if (read(evfd, &cur, sizeof(cur)) < sizeof(cur)) { + n = read(evfd, &cur, sizeof(cur)); + if (n < 0) { switch (errno) { case EAGAIN: /* Not considered an error */ @@ -79,13 +81,16 @@ eventfd_lower(int evfd) dbg_printf("read(2): %s", strerror(errno)); rv = -1; } - } + } else if (n != sizeof(cur)) { + dbg_puts("short read"); + rv = -1; + } return (rv); } int -evfilt_user_copyout(struct kevent *dst, struct knote *src, void *ptr) +evfilt_user_copyout(struct kevent *dst, struct knote *src, void *ptr UNUSED) { memcpy(dst, &src->kev, sizeof(*dst)); dst->fflags &= ~NOTE_FFCTRLMASK; //FIXME: Not sure if needed @@ -140,7 +145,7 @@ errout: } int -evfilt_user_knote_modify(struct filter *filt, struct knote *kn, +evfilt_user_knote_modify(struct filter *filt UNUSED, struct knote *kn, const struct kevent *kev) { unsigned int ffctrl; diff --git a/src/linux/vnode.c b/src/linux/vnode.c index 70f5d0a..315ffbf 100644 --- a/src/linux/vnode.c +++ b/src/linux/vnode.c @@ -19,7 +19,7 @@ static char * inotify_mask_dump(uint32_t mask) { - static char __thread buf[1024]; + static __thread char buf[1024]; #define INEVT_MASK_DUMP(attrib) \ if (mask & attrib) \ @@ -46,7 +46,7 @@ inotify_mask_dump(uint32_t mask) static char * inotify_event_dump(struct inotify_event *evt) { - static char __thread buf[1024]; + static __thread char buf[1024]; snprintf(buf, sizeof(buf), "wd=%d mask=%s", evt->wd, @@ -165,7 +165,7 @@ delete_watch(struct filter *filt, struct knote *kn) } int -evfilt_vnode_copyout(struct kevent *dst, struct knote *src, void *ptr) +evfilt_vnode_copyout(struct kevent *dst, struct knote *src, void *ptr UNUSED) { struct inotify_event evt; struct stat sb; @@ -241,6 +241,9 @@ int evfilt_vnode_knote_modify(struct filter *filt, struct knote *kn, const struct kevent *kev) { + (void)filt; + (void)kn; + (void)kev; return (-1); /* FIXME - STUB */ } diff --git a/src/linux/write.c b/src/linux/write.c index 76bb748..4c95a67 100644 --- a/src/linux/write.c +++ b/src/linux/write.c @@ -87,6 +87,9 @@ int evfilt_socket_knote_modify(struct filter *filt, struct knote *kn, const struct kevent *kev) { + (void) filt; + (void) kn; + (void) kev; return (-1); /* STUB */ } diff --git a/src/posix/platform.c b/src/posix/platform.c index 660e9ce..d006868 100644 --- a/src/posix/platform.c +++ b/src/posix/platform.c @@ -17,13 +17,13 @@ #include "../common/private.h" int -posix_kqueue_init(struct kqueue *kq) +posix_kqueue_init(struct kqueue *kq UNUSED) { return (0); } void -posix_kqueue_free(struct kqueue *kq) +posix_kqueue_free(struct kqueue *kq UNUSED) { } diff --git a/src/posix/platform.h b/src/posix/platform.h index 5f8d459..b169171 100644 --- a/src/posix/platform.h +++ b/src/posix/platform.h @@ -36,6 +36,9 @@ #define fastpath(x) __builtin_expect((x), 1) #define slowpath(x) __builtin_expect((x), 0) +/* + * GCC-compatible attributes + */ #ifdef MAKE_STATIC # define CONSTRUCTOR #else @@ -43,6 +46,7 @@ #endif #define VISIBLE __attribute__((visibility("default"))) #define HIDDEN __attribute__((visibility("hidden"))) +#define UNUSED __attribute__((unused)) #include #include