X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=ipaddr.c;h=4b5b48aa43d0cf3b6f889ebd049cced818638557;hp=09eb80df66aaaba86b6ba3c8d8b0e00aaf5da603;hb=656df7e2c9b688150ebe991d79a64ac096bb5f8e;hpb=a094a1bae5bcadfb96a57a3d31c1aa7c8815631d diff --git a/ipaddr.c b/ipaddr.c index 09eb80d..4b5b48a 100644 --- a/ipaddr.c +++ b/ipaddr.c @@ -7,6 +7,7 @@ #include #include #include "ipaddr.h" +#include "util.h" #define DEFAULT_ALLOC 2 #define EXTEND_ALLOC_BY 4 @@ -14,10 +15,10 @@ struct subnet_list *subnet_list_new(void) { struct subnet_list *r; - r=safe_malloc(sizeof(*r),"subnet_list_new:list"); + 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; } @@ -29,18 +30,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=realloc(a->list,sizeof(*nd)*na); - if (!nd) { - fatal_perror("subnet_list_set_len: realloc"); - } + REALLOC_ARY(a->list,na); a->alloc=na; - a->list=nd; } a->entries=l; } @@ -59,10 +55,10 @@ void subnet_list_append(struct subnet_list *a, uint32_t prefix, int len) struct ipset *ipset_new(void) { struct ipset *r; - r=safe_malloc(sizeof(*r),"ipset_new:set"); + 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; } @@ -114,18 +110,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=realloc(a->d,sizeof(*nd)*na); - if (!nd) { - fatal_perror("ipset_set_len: realloc"); - } + REALLOC_ARY(a->d,na); a->a=na; - a->d=nd; } a->l=l; } @@ -136,7 +127,6 @@ static void ipset_append_range(struct ipset *a, struct iprange r) a->d[a->l-1]=r; } -#define max(a,b) (a>b?a:b) struct ipset *ipset_union(struct ipset *a, struct ipset *b) { struct ipset *c; @@ -161,7 +151,7 @@ struct ipset *ipset_union(struct ipset *a, struct ipset *b) ipset_append_range(c,r); else if (r.a <= c->d[c->l-1].b+1) /* Extends (or is consumed by) the last range */ - c->d[c->l-1].b=max(c->d[c->l-1].b, r.b); + c->d[c->l-1].b=MAX(c->d[c->l-1].b, r.b); else ipset_append_range(c,r); }