build administrativa
[m6w6/ext-psi] / src / types / layout.c
index 3c8deaab3f9b7908327db56a45f9f4f2ac4164ec..a458c77d54db95bd57339ab2aea677ace3683d17 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *******************************************************************************/
 
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
 #include "data.h"
 
 #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));
+       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 +48,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);
        }
 }