chiark / gitweb /
site: transport peers: Formalise interface to transport peers
[secnet.git] / ipaddr.c
index f8cda00eabbc3f6c5dac170c249a9cb8211572b0..d23317c90dd1308b6d5a4c53fec0ec89bcdbd217 100644 (file)
--- a/ipaddr.c
+++ b/ipaddr.c
@@ -323,13 +323,27 @@ struct subnet_list *ipset_to_subnet_list(struct ipset *is)
     return r;
 }
 
+#define IPADDR_NBUFS_SHIFT 4
+#define IPADDR_NBUFS (1 << IPADDR_NBUFS_SHIFT)
+#define IPADDR_BUFLEN 20
+
+static char *ipaddr_getbuf(void)
+{
+    static int ipaddr_bufnum;
+    static char ipaddr_bufs[IPADDR_NBUFS][IPADDR_BUFLEN];
+
+    ipaddr_bufnum++;
+    ipaddr_bufnum &= IPADDR_NBUFS-1;
+    return ipaddr_bufs[ipaddr_bufnum];
+}
+
 /* The string buffer must be at least 16 bytes long */
 string_t ipaddr_to_string(uint32_t addr)
 {
     uint8_t a,b,c,d;
     string_t s;
 
-    s=safe_malloc(16,"ipaddr_to_string");
+    s=ipaddr_getbuf();
     a=addr>>24;
     b=addr>>16;
     c=addr>>8;
@@ -344,7 +358,7 @@ string_t subnet_to_string(struct subnet sn)
     uint8_t a,b,c,d;
     string_t s;
 
-    s=safe_malloc(19,"subnet_to_string");
+    s=ipaddr_getbuf();
     a=addr>>24;
     b=addr>>16;
     c=addr>>8;