chiark / gitweb /
string_item_to_iaddr: Actually set port if !CONFIG_IPV6
[secnet.git] / ipaddr.c
index 09eb80df66aaaba86b6ba3c8d8b0e00aaf5da603..4b5b48aa43d0cf3b6f889ebd049cced818638557 100644 (file)
--- a/ipaddr.c
+++ b/ipaddr.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "ipaddr.h"
+#include "util.h"
 
 #define DEFAULT_ALLOC 2
 #define EXTEND_ALLOC_BY 4
 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);
     }