I don't think it makes sense to return _the most important data_ here by reference.

If you pass in `NULL` for `ignore`, for example, the return value is meaningless. But if there were a `success` parameter instead, you could ignore it (at your own peril) and still get a meaningful result in the successful case.