I slightly prefer

```c
if (error)
    goto done;
if (error)
    goto done;

done:

if (error)
    git__free(stuff);

/* non-conditional cleanup */

return error;
```

without the extra label and goto. I realize these are equivalent, but the control flow is easier to follow for me.