lift single lib statement restriction
[m6w6/ext-psi] / src / types / layout.c
index 3c8deaab3f9b7908327db56a45f9f4f2ac4164ec..1a7dcb644a3ca3dd7aa60bc8f600326d78d1ddb7 100644 (file)
 
 #include <assert.h>
 
-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));
 
-       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);
        }
 }