NULL may be passed as the value in, out, in-out; or as a return value.
The data is owned by the callee, which is responsible of freeing it.