chiark / gitweb /
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 1b62251629c2bb96b626f01b0fe4e5c45dee27f7..a02a965b618e09787a96341ff248026f86dbfe49 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 385259d00a4e06a6dd36d1988c2e688dbdf2af4b..c0e82b04ec0713ec8356355fbc12aeddc6e5b97c 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 ead7d2e3de88ad3f9b649f464e6e4ad687f273da..f344159308e10eb243fd0f7895883897255566d7 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 11b21f6b6016d282d02554db9190d14e7752bd72..63c7c4542fab4ee3a8bd5e77a0286d88a9501728 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