import of dnsmasq-2.40.tar.gz
diff --git a/src/netlink.c b/src/netlink.c
index 101f2d3..3157f03 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -29,9 +29,9 @@
 static struct iovec iov;
 
 static void nl_err(struct nlmsghdr *h);
-static void nl_routechange(struct daemon *daemon, struct nlmsghdr *h);
+static void nl_routechange(struct nlmsghdr *h);
 
-void netlink_init(struct daemon *daemon)
+void netlink_init(void)
 {
   struct sockaddr_nl addr;
 
@@ -56,19 +56,13 @@
     }
   
   if (daemon->netlinkfd == -1)
-    die(_("cannot create netlink socket: %s"), NULL);
-  else
-    {
-      int flags = fcntl(daemon->netlinkfd, F_GETFD);
-      if (flags != -1)
-	fcntl(daemon->netlinkfd, F_SETFD, flags | FD_CLOEXEC); 
-    }
-
+    die(_("cannot create netlink socket: %s"), NULL, EC_MISC);
+  
   iov.iov_len = 200;
   iov.iov_base = safe_malloc(iov.iov_len);
 }
 
-static ssize_t netlink_recv(struct daemon *daemon)
+static ssize_t netlink_recv(void)
 {
   struct msghdr msg;
   ssize_t rc;
@@ -107,7 +101,7 @@
   return rc;
 }
   
-int iface_enumerate(struct daemon *daemon, void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
+int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
 {
   struct sockaddr_nl addr;
   struct nlmsghdr *h;
@@ -142,14 +136,14 @@
     
   while (1)
     {
-      if ((len = netlink_recv(daemon)) == -1)
+      if ((len = netlink_recv()) == -1)
 	return 0;
   
       for (h = (struct nlmsghdr *)iov.iov_base; NLMSG_OK(h, (size_t)len); h = NLMSG_NEXT(h, len))
  	if (h->nlmsg_type == NLMSG_ERROR)
 	  nl_err(h);
 	else if (h->nlmsg_seq != seq)
-	  nl_routechange(daemon, h); /* May be multicast arriving async */
+	  nl_routechange(h); /* May be multicast arriving async */
 	else if (h->nlmsg_type == NLMSG_DONE)
 	  {
 #ifdef HAVE_IPV6
@@ -186,7 +180,7 @@
 		  }
 		
 		if (addr.s_addr && ipv4_callback)
-		  if (!((*ipv4_callback)(daemon, addr, ifa->ifa_index, netmask, broadcast, parm)))
+		  if (!((*ipv4_callback)(addr, ifa->ifa_index, netmask, broadcast, parm)))
 		    return 0;
 	      }
 #ifdef HAVE_IPV6
@@ -202,7 +196,7 @@
 		  }
 		
 		if (addrp && ipv6_callback)
-		  if (!((*ipv6_callback)(daemon, addrp, ifa->ifa_index, ifa->ifa_index, parm)))
+		  if (!((*ipv6_callback)(addrp, ifa->ifa_index, ifa->ifa_index, parm)))
 		    return 0;
 	      }
 #endif
@@ -210,18 +204,18 @@
     }
 }
 
-void netlink_multicast(struct daemon *daemon)
+void netlink_multicast(void)
 {
   ssize_t len;
   struct nlmsghdr *h;
   
-  if ((len = netlink_recv(daemon)) != -1)
+  if ((len = netlink_recv()) != -1)
     {
       for (h = (struct nlmsghdr *)iov.iov_base; NLMSG_OK(h, (size_t)len); h = NLMSG_NEXT(h, len))
 	if (h->nlmsg_type == NLMSG_ERROR)
 	  nl_err(h);
 	else
-	  nl_routechange(daemon, h);
+	  nl_routechange(h);
     }
 }
 
@@ -237,7 +231,7 @@
    This helps on DoD links, where frequently the packet which triggers dialling is
    a DNS query, which then gets lost. By re-sending, we can avoid the lookup
    failing. */ 
-static void nl_routechange(struct daemon *daemon, struct nlmsghdr *h)
+static void nl_routechange(struct nlmsghdr *h)
 {
   if (h->nlmsg_type == RTM_NEWROUTE && daemon->srv_save)
     {