if (fetchw (as, a, &addr, &gen1, arg) < 0
|| fetchw (as, a, &addr, &next_addr, arg) < 0)
- return ret;
+ goto fail;
for (addr = next_addr; addr != 0; addr = next_addr)
{
{
if (!di)
di = calloc (1, sizeof (*di));
+ if (!di) {
+ ret = -UNW_ENOMEM;
+ goto fail;
+ }
di->start_ip = start_ip;
di->end_ip = end_ip;
recheck:
addr = dyn_list_addr;
if (fetchw (as, a, &addr, &gen2, arg) < 0)
- return ret;
+ goto fail;
}
while (gen1 != gen2);
+fail:
if (ret < 0 && di)
free (di);