On Mon, 2008-04-28 at 03:39 -0400, Daniel Veillard wrote: > > #define VIR_REALLOC(ptr) virRealloc(&(ptr), sizeof(*(ptr))) > > That i really don't understand. How do you expect to use that realloc > without passing a new size. > > > #define VIR_REALLOC_N(ptr, count) virReallocN(&(ptr), sizeof(*(ptr)), (count)) > > That I can understand , but the previous one i can't. > > > #define VIR_FREE(ptr) virFree(&(ptr)) > [...] > > Much less ugly: > > > > if (VIR_ALLOC_N(guest->arch.defaultInfo.machines, nmachines) < 0) > > return -1; > > > > if (VIR_REALLOC(migrateTrans, caps->host.nmigrateTrans+1) < 0) > > return -1; > > how does sizeof(*(caps->host.nmigrateTrans+1)) increases the size ? > Doesn't make sense to me, you take a pointer, increment it, so basically just > pointing to the next element in the array, but the size of the pointed object > would be identical and realloc() becomes a noop. > > The proposal may help clean a lot of things, but VIR_REALLOC I don't > understand, what did i missed ? Looks to me like VIR_REALLOC() would be a rarely used API and Dan just had a typo in the above example - it should have used VIR_REALLOC_N() I'm having difficulty thinking of how VIR_REALLOC() might be interesting - e.g. the highly contrived example below. Cheers, Mark. struct foo { int i; }; struct bar { struct foo foo; int j; } struct foo *get_foo(int i) { struct foo *foo; if (!VIR_ALLOC(foo)) return NULL; foo->i = i; return foo; } struct bar *get_bar(int i, int j) { struct bar *bar; struct foo *foo; if (!(foo = get_foo(i))) return NULL; bar = (struct bar *) foo; if (!VIR_REALLOC(bar)) { VIR_FREE(foo); return NULL; } bar->j = j; return bar; } -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list