X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fio.c;h=8c5f45f30827c9e722227e3787797288713e056e;hp=240a1c038da368c274363cb3cfcd37945a517a0e;hb=cfc7d301da49dd2b2ce346b08bf5fbff3acfae67;hpb=8cca0397ef6f6017b13ce9ab4999bf3d92a2dee5 diff --git a/ccan/tdb2/io.c b/ccan/tdb2/io.c index 240a1c03..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++)