On Fri, Oct 01, 2021 at 04:26:17PM +0200, Christian Schoenebeck wrote: > Implements deep auto free of arrays while retaining common C-style > squared bracket access. Main purpose of this API is to get rid of > error prone individual array deallocation pathes in user code, i.e. > turning something like this: > > void doSomething(size_t n) { > Foo *foos = malloc(n * sizeof(Foo)); > for (...) { > foos[i].s = malloc(...); > if (...) { > goto out; > } > } > out: > if (...) { > for (...) { > /* deep deallocation */ > free(foos[i].s); > } > /* array deallocation */ > free(foos); > } > } > > into something more simple and safer like: > > void doSomething(size_t n) { > P9ARRAY_REF(Foo) foos = NULL; > P9ARRAY_NEW(Foo, foos, n); > for (...) { > foos[i].s = malloc(...); > if (...) { > return; /* array auto freed here */ > } > } > /* array auto freed here */ > }
As explained before, I'm against the idea of introducing new ways to automatically free local variables that are not using g_auto* functionality. It is not following the QEMU wide coding style that is documented. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|