do not assume size_t will fit in void *