X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Flayout.c;h=c462120126f6da61cd3f50d3ebe61154a19f209d;hb=fb8f7887c289ae74d6e8dd85d55ae09e6796e890;hp=3c8deaab3f9b7908327db56a45f9f4f2ac4164ec;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84;p=m6w6%2Fext-psi diff --git a/src/types/layout.c b/src/types/layout.c index 3c8deaa..c462120 100644 --- a/src/types/layout.c +++ b/src/types/layout.c @@ -28,14 +28,15 @@ #include -struct psi_layout *psi_layout_init(size_t pos, size_t len) +struct psi_layout *psi_layout_init(size_t pos, size_t len, struct psi_layout *bfw) { - struct psi_layout *l = calloc(1, sizeof(*l)); + struct psi_layout *l = pecalloc(1, sizeof(*l), 1); - assert(pos + len); + assert(pos + len + (intptr_t) bfw); l->pos = pos; l->len = len; + l->bfw = bfw; return l; } @@ -43,8 +44,13 @@ struct psi_layout *psi_layout_init(size_t pos, size_t len) void psi_layout_free(struct psi_layout **l_ptr) { if (*l_ptr) { - free(*l_ptr); + struct psi_layout *l = *l_ptr; *l_ptr = NULL; + + if (l->bfw) { + psi_layout_free(&l->bfw); + } + free(l); } }