struct cidr * range2cidrlist(struct cidr *list, int *cli, int *cls, u_int32_t start, u_int32_t end) { u_int8_t maxsize, diff; struct cidr *tmp; while (end >= start) { maxsize = maxblock(start, 32); diff = maxdiff(start, end); maxsize = MAX(maxsize, diff); if (*cls <= *cli + 1) { /* one extra for terminator */ tmp = realloc(list, (*cls + 32) * sizeof(struct cidr)); if (tmp == NULL) errx(1, "malloc failed"); list = tmp; *cls += 32; } list[*cli].addr = start; list[*cli].bits = maxsize; (*cli)++; start = start + (1 << (32 - maxsize)); } return (list); }
struct cidr * range2cidrlist(u_int32_t start, u_int32_t end) { struct cidr *list = NULL; size_t cs = 0, cu = 0; u_int8_t maxsize, diff; struct cidr *tmp; while (end >= start) { maxsize = maxblock(start, 32); diff = maxdiff(start, end); maxsize = MAX(maxsize, diff); if (cs <= cu + 1) { /* one extra for terminator */ tmp = realloc(list, (cs + 32) * sizeof(struct cidr)); if (tmp == NULL) errx(1, "malloc failed"); list = tmp; cs += 32; } list[cu].addr = start; list[cu].bits = maxsize; cu++; list[cu].addr = 0; list[cu].bits = 0; start = start + (1 << (32 - maxsize)); } return (list); }