Index: cdbw.c =================================================================== RCS file: /cvsroot/src/lib/libc/cdb/cdbw.c,v retrieving revision 1.3 diff -u -p -u -r1.3 cdbw.c --- cdbw.c 13 Mar 2012 21:32:12 -0000 1.3 +++ cdbw.c 26 Mar 2012 22:53:21 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: cdbw.c,v 1.3 2012/03/13 21:32:12 joerg Exp $ */ +/* $NetBSD: cdbw.c,v 1.2 2012/03/13 21:13:31 christos Exp $ */ /*- * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,12 +36,13 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: cdbw.c,v 1.3 2012/03/13 21:32:12 joerg Exp $"); +__RCSID("$NetBSD: cdbw.c,v 1.2 2012/03/13 21:13:31 christos Exp $"); #include "namespace.h" #include <sys/endian.h> #include <sys/queue.h> +#include <assert.h> #include <cdbw.h> #include <stdlib.h> #include <string.h> @@ -167,7 +168,8 @@ cdbw_put_data(struct cdbw *cdbw, const v memcpy(cdbw->data_ptr[cdbw->data_counter], data, datalen); cdbw->data_len[cdbw->data_counter] = datalen; cdbw->data_size += datalen; - *idx = cdbw->data_counter++; + _DIAGASSERT(__type_fit(uint32_t, cdbw->data_counter)); + *idx = (uint32_t)cdbw->data_counter++; return 0; } @@ -330,7 +332,9 @@ remove_vertex(struct state *state, struc return; } - state->output_order[--state->output_index] = e - state->edges; + ptrdiff_t td = e - state->edges; + _DIAGASSERT(__type_fit(uint32_t, td)); + state->output_order[--state->output_index] = (uint32_t)td; vl = &state->verts[e->left]; vm = &state->verts[e->middle]; @@ -365,8 +369,7 @@ build_graph(struct cdbw *cdbw, struct st struct key_hash *key_hash; struct vertex *v; struct edge *e; - uint32_t hashes[3]; - size_t i; + uint32_t hashes[3], i; e = state->edges; for (i = 0; i < cdbw->hash_size; ++i) { @@ -492,8 +495,10 @@ print_hash(struct cdbw *cdbw, struct sta memcpy(buf, "NBCDB\n\0", 7); buf[7] = 1; strncpy((char *)buf + 8, descr, 16); - le32enc(buf + 24, cdbw->data_size); - le32enc(buf + 28, cdbw->data_counter); + _DIAGASSERT(__type_fit(uint32_t, cdbw->data_size)); + le32enc(buf + 24, (uint32_t)cdbw->data_size); + _DIAGASSERT(__type_fit(uint32_t, cdbw->data_counter)); + le32enc(buf + 28, (uint32_t)cdbw->data_counter); le32enc(buf + 32, state->entries); le32enc(buf + 36, state->seed); cur_pos = 40; @@ -504,7 +509,8 @@ print_hash(struct cdbw *cdbw, struct sta le32enc(buf + cur_pos, state->g[i]); cur_pos += size; } - size2 = compute_size(cdbw->data_size); + _DIAGASSERT(__type_fit(uint32_t, cdbw->data_size)); + size2 = compute_size((uint32_t)cdbw->data_size); size = size * state->entries % size2; if (size != 0) { size = size2 - size; @@ -516,7 +522,9 @@ print_hash(struct cdbw *cdbw, struct sta COND_FLUSH_BUFFER(4); le32enc(buf + cur_pos, data_size); cur_pos += size2; - data_size += cdbw->data_len[i]; + _DIAGASSERT(__type_fit(uint32_t, + data_size + cdbw->data_len[i])); + data_size += (uint32_t)cdbw->data_len[i]; } COND_FLUSH_BUFFER(4); le32enc(buf + cur_pos, data_size); @@ -561,8 +569,10 @@ cdbw_output(struct cdbw *cdbw, int fd, c rv = 0; - state.keys = cdbw->key_counter; - state.data_entries = cdbw->data_counter; + _DIAGASSERT(__type_fit(uint32_t, cdbw->key_counter)); + state.keys = (uint32_t)cdbw->key_counter; + _DIAGASSERT(__type_fit(uint32_t, cdbw->data_counter)); + state.data_entries = (uint32_t)cdbw->data_counter; state.entries = state.keys + (state.keys + 3) / 4; if (state.entries < 10) state.entries = 10;