fix computing destination address set: a plain "char" is not signed on all platforms

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2018-05-17 19:36:16 +08:00
parent e876948a42
commit 6d48d692ba

View file

@ -1008,14 +1008,15 @@ static void rebuild_make_locs(int *p_nlocs, nn_locator_t **p_locs, struct addrse
*p_locs = locs; *p_locs = locs;
} }
static void rebuild_make_covered(char **covered, const struct writer *wr, int *nreaders, int nlocs, const nn_locator_t *locs) static void rebuild_make_covered(int8_t **covered, const struct writer *wr, int *nreaders, int nlocs, const nn_locator_t *locs)
{ {
struct rebuild_flatten_locs_arg flarg; struct rebuild_flatten_locs_arg flarg;
struct wr_prd_match *m; struct wr_prd_match *m;
ut_avlIter_t it; ut_avlIter_t it;
int rdidx, i, j; int rdidx, i, j;
char *cov = os_malloc((size_t) *nreaders * (size_t) nlocs); int8_t *cov = os_malloc((size_t) *nreaders * (size_t) nlocs * sizeof (*covered));
memset(cov, 0xff, (size_t) *nreaders * (size_t) nlocs); for (i = 0; i < *nreaders * nlocs; i++)
cov[i] = -1;
rdidx = 0; rdidx = 0;
flarg.locs = os_malloc((size_t) nlocs * sizeof(*flarg.locs)); flarg.locs = os_malloc((size_t) nlocs * sizeof(*flarg.locs));
#ifndef NDEBUG #ifndef NDEBUG
@ -1041,7 +1042,7 @@ static void rebuild_make_covered(char **covered, const struct writer *wr, int *n
/* all addresses should be in the combined set of addresses -- FIXME: this doesn't hold if the address sets can change */ /* all addresses should be in the combined set of addresses -- FIXME: this doesn't hold if the address sets can change */
const nn_locator_t *l = bsearch(&flarg.locs[j], locs, (size_t) nlocs, sizeof(*locs), rebuild_compare_locs); const nn_locator_t *l = bsearch(&flarg.locs[j], locs, (size_t) nlocs, sizeof(*locs), rebuild_compare_locs);
int lidx; int lidx;
char x; int8_t x;
assert(l != NULL); assert(l != NULL);
lidx = (int) (l - locs); lidx = (int) (l - locs);
if (l->kind != NN_LOCATOR_KIND_UDPv4MCGEN) if (l->kind != NN_LOCATOR_KIND_UDPv4MCGEN)
@ -1050,7 +1051,7 @@ static void rebuild_make_covered(char **covered, const struct writer *wr, int *n
{ {
const nn_udpv4mcgen_address_t *l1 = (const nn_udpv4mcgen_address_t *) flarg.locs[j].address; const nn_udpv4mcgen_address_t *l1 = (const nn_udpv4mcgen_address_t *) flarg.locs[j].address;
assert(l1->base + l1->idx <= 127); assert(l1->base + l1->idx <= 127);
x = (char) (l1->base + l1->idx); x = (int8_t) (l1->base + l1->idx);
} }
cov[rdidx * nlocs + lidx] = x; cov[rdidx * nlocs + lidx] = x;
} }
@ -1062,7 +1063,7 @@ static void rebuild_make_covered(char **covered, const struct writer *wr, int *n
*nreaders = rdidx; *nreaders = rdidx;
} }
static void rebuild_make_locs_nrds(int **locs_nrds, int nreaders, int nlocs, const char *covered) static void rebuild_make_locs_nrds(int **locs_nrds, int nreaders, int nlocs, const int8_t *covered)
{ {
int i, j; int i, j;
int *ln = os_malloc((size_t) nlocs * sizeof(*ln)); int *ln = os_malloc((size_t) nlocs * sizeof(*ln));
@ -1081,7 +1082,7 @@ OS_WARNING_MSVC_ON(6386);
*locs_nrds = ln; *locs_nrds = ln;
} }
static void rebuild_trace_covered(int nreaders, int nlocs, const nn_locator_t *locs, const int *locs_nrds, const char *covered) static void rebuild_trace_covered(int nreaders, int nlocs, const nn_locator_t *locs, const int *locs_nrds, const int8_t *covered)
{ {
int i, j; int i, j;
for (i = 0; i < nlocs; i++) for (i = 0; i < nlocs; i++)
@ -1119,7 +1120,7 @@ static int rebuild_select(int nlocs, const nn_locator_t *locs, const int *locs_n
return (locs_nrds[j] > 0) ? j : -1; return (locs_nrds[j] > 0) ? j : -1;
} }
static void rebuild_add(struct addrset *newas, int locidx, int nreaders, int nlocs, const nn_locator_t *locs, const char *covered) static void rebuild_add(struct addrset *newas, int locidx, int nreaders, int nlocs, const nn_locator_t *locs, const int8_t *covered)
{ {
char str[INET6_ADDRSTRLEN_EXTENDED]; char str[INET6_ADDRSTRLEN_EXTENDED];
if (locs[locidx].kind != NN_LOCATOR_KIND_UDPv4MCGEN) if (locs[locidx].kind != NN_LOCATOR_KIND_UDPv4MCGEN)
@ -1149,7 +1150,7 @@ static void rebuild_add(struct addrset *newas, int locidx, int nreaders, int nlo
} }
} }
static void rebuild_drop(int locidx, int nreaders, int nlocs, int *locs_nrds, char *covered) static void rebuild_drop(int locidx, int nreaders, int nlocs, int *locs_nrds, int8_t *covered)
{ {
/* readers covered by this locator no longer matter */ /* readers covered by this locator no longer matter */
int i, j; int i, j;
@ -1173,7 +1174,7 @@ static void rebuild_writer_addrset_setcover(struct addrset *newas, struct writer
int nreaders, nlocs; int nreaders, nlocs;
nn_locator_t *locs; nn_locator_t *locs;
int *locs_nrds; int *locs_nrds;
char *covered; int8_t *covered;
int best; int best;
if ((all_addrs = rebuild_make_all_addrs(&nreaders, wr)) == NULL) if ((all_addrs = rebuild_make_all_addrs(&nreaders, wr)) == NULL)
return; return;