From 66142b071a2497d7e3cf58d7bf5159bb1c970d84 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 2 Aug 2005 14:08:18 +0000 Subject: * allow caller to specifiy additional CFLAGS arguments to bootstrap.sh * fix some warnings (and some real errors) found when compiling avahi with excessive GCC warnings git-svn-id: file:///home/lennart/svn/public/avahi/trunk@209 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-core/netlink.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'avahi-core/netlink.c') diff --git a/avahi-core/netlink.c b/avahi-core/netlink.c index ff88b91..119e195 100644 --- a/avahi-core/netlink.c +++ b/avahi-core/netlink.c @@ -39,6 +39,8 @@ struct AvahiNetlink { GSource *source; void (*callback) (AvahiNetlink *nl, struct nlmsghdr *n, gpointer userdata); gpointer userdata; + guint8* buffer; + guint buffer_length; }; gboolean avahi_netlink_work(AvahiNetlink *nl, gboolean block) { @@ -47,19 +49,22 @@ gboolean avahi_netlink_work(AvahiNetlink *nl, gboolean block) { for (;;) { ssize_t bytes; struct nlmsghdr *p; - guint8 buffer[64*1024]; - p = (struct nlmsghdr *) buffer; + for (;;) { + if ((bytes = recv(nl->fd, nl->buffer, nl->buffer_length, block ? 0 : MSG_DONTWAIT)) < 0) { - if ((bytes = recv(nl->fd, buffer, sizeof(buffer), block ? 0 : MSG_DONTWAIT)) < 0) { - - if (errno == EAGAIN || errno == EINTR) - break; + if (errno == EAGAIN || errno == EINTR) + return TRUE; + + avahi_log_warn("NETLINK: recv() failed: %s", strerror(errno)); + return FALSE; + } - avahi_log_warn("NETLINK: recv() failed: %s", strerror(errno)); - return FALSE; + break; } + p = (struct nlmsghdr *) nl->buffer; + if (nl->callback) { for (; bytes > 0; p = NLMSG_NEXT(p, bytes)) { if (!NLMSG_OK(p, (size_t) bytes)) { @@ -72,10 +77,8 @@ gboolean avahi_netlink_work(AvahiNetlink *nl, gboolean block) { } if (block) - break; + return TRUE; } - - return TRUE; } static gboolean prepare_func(GSource *source, gint *timeout) { @@ -144,6 +147,7 @@ AvahiNetlink *avahi_netlink_new(GMainContext *context, gint priority, guint32 gr nl->seq = 0; nl->callback = cb; nl->userdata = userdata; + nl->buffer = g_new(guint8, nl->buffer_length = 64*1024); nl->source = g_source_new(&source_funcs, sizeof(GSource) + sizeof(AvahiNetlink*)); *((AvahiNetlink**) (((guint8*) nl->source) + sizeof(GSource))) = nl; @@ -167,6 +171,7 @@ void avahi_netlink_free(AvahiNetlink *nl) { g_source_unref(nl->source); g_main_context_unref(nl->context); close(nl->fd); + g_free(nl->buffer); g_free(nl); } -- cgit