Using `%zu' for the size_t value. That might be a problem on older
platforms, but we'll see. If asked for zero bytes then free an existing
pointer, only passing it to free(3) if it's non-NULL, and then allocate
a byte so a unique pointer is returned.