lib/addr.c: Introduce our own `freeaddrinfo' function.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 1 Jun 2020 11:28:31 +0000 (12:28 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 1 Jun 2020 11:47:57 +0000 (12:47 +0100)
I plan to return fake `struct addrinfo' lists from `netaddress_resolve',
but I can't make one which can be freed using `freeaddrinfo''s secret
recipe, so I must make my own veneer.

lib/addr.c
lib/addr.h
lib/client-common.c
server/state.c

index 1b62251..a02a965 100644 (file)
@@ -339,6 +339,9 @@ void netaddress_format(const struct netaddress *na,
  * @param passive True if passive (bindable) address is desired
  * @param protocol Protocol number desired (e.g. @c IPPROTO_TCP)
  * @return List of suitable addresses or NULL
+ *
+ * Free the address using netaddress_freeaddrinfo() because it might not
+ * have come from getaddrinfo() directly.
  */
 struct addrinfo *netaddress_resolve(const struct netaddress *na,
                                    int passive,
@@ -364,6 +367,13 @@ struct addrinfo *netaddress_resolve(const struct netaddress *na,
   return res;
 }
 
+/** @brief Free an address-info list from netaddress_resovle()
+ * @param res Address-info list
+ */
+void netaddress_freeaddrinfo(struct addrinfo *res) {
+  freeaddrinfo(res);
+}
+
 /*
 Local Variables:
 c-basic-offset:2
index 385259d..c0e82b0 100644 (file)
@@ -65,6 +65,7 @@ void netaddress_format(const struct netaddress *na,
 struct addrinfo *netaddress_resolve(const struct netaddress *na,
                                    int passive,
                                    int protocol) attribute((nonnull (1)));
+void netaddress_freeaddrinfo(struct addrinfo *res) attribute((nonnull (1)));
 
 #endif /* ADDR_H */
 
index ead7d2e..f344159 100644 (file)
@@ -98,7 +98,7 @@ socklen_t disorder_find_server(struct config *c, unsigned flags,
   if(namep)
     *namep = format_sockaddr(sa);
   if(res)
-    freeaddrinfo(res);
+    netaddress_freeaddrinfo(res);
   return len;
 }
 
index 11b21f6..63c7c45 100644 (file)
@@ -171,7 +171,7 @@ void reset_sockets(ev_source *ev) {
   }
   /* if res is still set it needs freeing */
   if(res)
-    freeaddrinfo(res);
+    netaddress_freeaddrinfo(res);
 }
 
 /** @brief Reconfigure the server