X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/b7886fd46ab05c97b8a072e497903622bd1d5290..1fc8a4acb3ef658696038c9c4bd3c155fbc27ac3:/ipaddr.c diff --git a/ipaddr.c b/ipaddr.c index b3cd0a7..aa7ac04 100644 --- a/ipaddr.c +++ b/ipaddr.c @@ -1,5 +1,23 @@ /* The 'ipset' data structure and related algorithms in this file were inspired by the 'ipaddr.py' library from Cendio Systems AB. */ +/* + * This file is part of secnet. + * See README for full list of copyright holders. + * + * secnet is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version d of the License, or + * (at your option) any later version. + * + * secnet is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 3 along with secnet; if not, see + * https://www.gnu.org/licenses/gpl.html. + */ #include "secnet.h" #include @@ -18,7 +36,7 @@ struct subnet_list *subnet_list_new(void) NEW(r); r->entries=0; r->alloc=DEFAULT_ALLOC; - r->list=safe_malloc_ary(sizeof(*r->list),r->alloc,"subnet_list_new:data"); + NEW_ARY(r->list,r->alloc); return r; } @@ -30,15 +48,13 @@ void subnet_list_free(struct subnet_list *a) static void subnet_list_set_len(struct subnet_list *a, int32_t l) { - struct subnet *nd; int32_t na; if (l>a->alloc) { - assert(a->alloc < (int)(INT_MAX/sizeof(*nd))-EXTEND_ALLOC_BY); + assert(a->alloc < INT_MAX-EXTEND_ALLOC_BY); na=a->alloc+EXTEND_ALLOC_BY; - nd=safe_realloc_ary(a->list,sizeof(*nd),na,"subnet_list_set_len"); + REALLOC_ARY(a->list,na); a->alloc=na; - a->list=nd; } a->entries=l; } @@ -60,7 +76,7 @@ struct ipset *ipset_new(void) NEW(r); r->l=0; r->a=DEFAULT_ALLOC; - r->d=safe_malloc(sizeof(*r->d)*r->a,"ipset_new:data"); + NEW_ARY(r->d,r->a); return r; } @@ -112,15 +128,13 @@ struct ipset *ipset_from_subnet_list(struct subnet_list *l) static void ipset_set_len(struct ipset *a, int32_t l) { - struct iprange *nd; int32_t na; if (l>a->a) { assert(a->a < INT_MAX-EXTEND_ALLOC_BY); na=a->a+EXTEND_ALLOC_BY; - nd=safe_realloc_ary(a->d,sizeof(*nd),na,"ipset_set_len"); + REALLOC_ARY(a->d,na); a->a=na; - a->d=nd; } a->l=l; } @@ -317,18 +331,12 @@ 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]; + SBUF_DEFINE(16, IPADDR_BUFLEN); + return SBUF; } /* The string buffer must be at least 16 bytes long */