-PList* plist_new(void) {
- PList* list = xmalloc(sizeof(*list));
- obstack_init(&list->obst);
- list->firstElement = NULL;
- list->lastElement = NULL;
- list->firstFreeElement = NULL;
- list->elementCount = 0;
+plist_t *plist_new(void) {
+ plist_t *list = xmalloc(sizeof(*list) + sizeof(*list->obst));
+
+ list->obst = (struct obstack *)&list[1];
+ list->foreign_obstack = 0;
+ list->first_element = NULL;
+ list->last_element = NULL;
+ list->first_free_element = NULL;
+ list->element_count = 0;
+
+ obstack_init(list->obst);
+ return list;
+}
+
+plist_t *plist_obstack_new(struct obstack *obst) {
+ plist_t *list = obstack_alloc(obst, sizeof(*list));
+
+ list->obst = obst;
+ list->foreign_obstack = 1;
+ list->first_element = NULL;
+ list->last_element = NULL;
+ list->first_free_element = NULL;
+ list->element_count = 0;
+