X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fio.c;h=8c5f45f30827c9e722227e3787797288713e056e;hp=4ed37ca2cffbeaac1c6398ac5dbf20926e6d0d83;hb=18fe5ef012a96014b9e61e48616e682b4a5708a2;hpb=45e9956d665dc8819eb183ae239581410dcecdb3 diff --git a/ccan/tdb2/io.c b/ccan/tdb2/io.c index 4ed37ca2..8c5f45f3 100644 --- a/ccan/tdb2/io.c +++ b/ccan/tdb2/io.c @@ -48,8 +48,13 @@ void tdb_mmap(struct tdb_context *tdb) if (tdb->flags & TDB_NOMMAP) return; - tdb->file->map_ptr = mmap(NULL, tdb->file->map_size, tdb->mmap_flags, - MAP_SHARED, tdb->file->fd, 0); + /* size_t can be smaller than off_t. */ + if ((size_t)tdb->file->map_size == tdb->file->map_size) { + tdb->file->map_ptr = mmap(NULL, tdb->file->map_size, + tdb->mmap_flags, + MAP_SHARED, tdb->file->fd, 0); + } else + tdb->file->map_ptr = MAP_FAILED; /* * NB. When mmap fails it returns MAP_FAILED *NOT* NULL !!!! @@ -125,6 +130,7 @@ static enum TDB_ERROR tdb_oob(struct tdb_context *tdb, tdb_off_t len, /* Endian conversion: we only ever deal with 8 byte quantities */ void *tdb_convert(const struct tdb_context *tdb, void *buf, tdb_len_t size) { + assert(size % 8 == 0); if (unlikely((tdb->flags & TDB_CONVERT)) && buf) { uint64_t i, *p = (uint64_t *)buf; for (i = 0; i < size / 8; i++) @@ -342,7 +348,7 @@ enum TDB_ERROR tdb_write_off(struct tdb_context *tdb, static void *_tdb_alloc_read(struct tdb_context *tdb, tdb_off_t offset, tdb_len_t len, unsigned int prefix) { - void *buf; + unsigned char *buf; enum TDB_ERROR ecode; /* some systems don't like zero length malloc */ @@ -592,12 +598,6 @@ void tdb_inc_seqnum(struct tdb_context *tdb) } } -void add_stat_(struct tdb_context *tdb, uint64_t *s, size_t val) -{ - if ((uintptr_t)s < (uintptr_t)tdb->stats + tdb->stats->size) - *s += val; -} - static const struct tdb_methods io_methods = { tdb_read, tdb_write,