chiark / gitweb /
nss-myhostname: do not use _cleanup_
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 2 Apr 2013 17:52:51 +0000 (13:52 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 2 Apr 2013 17:57:32 +0000 (13:57 -0400)
mss-myhostname wasn't working because of underlinking. Instead of
fixing the underlinking, just remove the use of _cleanup_ macros.

It is impolite to use our utility functions in modules designed to be
loaded by others. So cleanup macros which (at some point) call assert
which calls log_assert_failed, should not be used. Revert this part of
commit d73c3269c.

src/nss-myhostname/netlink.c

index 2329f00943106586fb6243fb049e62ee1d13110e..b1ef912c8ac1d268f683a31b919ab270f8477eb2 100644 (file)
@@ -35,8 +35,6 @@
 #include <stdlib.h>
 
 #include "ifconf.h"
-#include "macro.h"
-#include "util.h"
 
 #define SEQ 4711
 
@@ -172,27 +170,33 @@ int ifconf_acquire_addresses(struct address **_list, unsigned *_n_list) {
         int r, on = 1;
         struct address *list = NULL;
         unsigned n_list = 0;
-        int _cleanup_close_ fd;
+        int fd;
 
         fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
         if (fd < 0)
                 return -errno;
 
-        if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0)
-                return -errno;
+        if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) {
+                r = -errno;
+                goto finish;
+        }
 
-        if (send(fd, &req, req.hdr.nlmsg_len, 0) < 0)
-                return -errno;
+        if (send(fd, &req, req.hdr.nlmsg_len, 0) < 0) {
+                r = -errno;
+                goto finish;
+        }
 
         while((r = read_reply(fd, &list, &n_list)) == 0)
                 ;
 
+finish:
+        close(fd);
+
         if (r < 0) {
                 free(list);
                 return r;
         }
 
-        assert(n_list == 0 || list);
         qsort(list, n_list, sizeof(struct address), address_compare);
 
         *_list = list;