X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=ipaddr.c;h=d23317c90dd1308b6d5a4c53fec0ec89bcdbd217;hp=f8cda00eabbc3f6c5dac170c249a9cb8211572b0;hb=322a0105bc70230236732e9751d0c888f37a5072;hpb=1caa23ff879cec7f8f36b32a987f0610291ef177 diff --git a/ipaddr.c b/ipaddr.c index f8cda00..d23317c 100644 --- 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;