Another thing is that it's somewhat of a best practice to not modify an out argument until function exit (usually successful exit.)

Libuv is not 100% consistent in that regard but a lot of the code that clobbers out arguments all over the place was carried over from node v0.4.