# HG changeset patch # User Josef 'Jeff' Sipek # Date 1551022703 18000 # Node ID cf7308f74b62cd3f3e0b9f614200282701052db9 # Parent a8663230bd14e633766b9e162ec758b5b97d2416 val: use a goto for error handling in __val_alloc_array This will make the next commit simpler. Signed-off-by: Josef 'Jeff' Sipek diff -r a8663230bd14 -r cf7308f74b62 val_array.c --- a/val_array.c Thu Feb 21 19:18:52 2019 -0500 +++ b/val_array.c Sun Feb 24 10:38:23 2019 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Josef 'Jeff' Sipek + * Copyright (c) 2018-2019 Josef 'Jeff' Sipek * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,21 +28,24 @@ bool heap) { struct val *val; + size_t i; val = __val_alloc(VT_ARRAY); - if (IS_ERR(val)) { - size_t i; + if (IS_ERR(val)) + goto err; - for (i = 0; i < nelem; i++) - val_putref(vals[i]); + val->_set_array.vals = vals; + val->_set_array.nelem = nelem; + val->static_alloc = !heap; - if (heap) - free(vals); - } else { - val->_set_array.vals = vals; - val->_set_array.nelem = nelem; - val->static_alloc = !heap; - } + return val; + +err: + for (i = 0; i < nelem; i++) + val_putref(vals[i]); + + if (heap) + free(vals); return val; }