/*
    deathstack.c  Stupid workaround for cheezmud.
    Copyright (C) 1995  David Flater.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <stdlib.h>
#include <assert.h>

/* This code was added to avoid the need to free objects that are in */
/* world while traversing world (which is extremely bad luck).       */

struct death_elm {
  void *elm;
  struct death_elm *next;
};

struct death_elm *list_of_death = NULL;

void
push_death (void *deadone)
{
  struct death_elm *t;
  assert (t = malloc (sizeof (struct death_elm)));
  t->next = list_of_death;
  t->elm = deadone;
  list_of_death = t;
}

void *
pop_death ()
{
  struct death_elm *t;
  void *u;
  t = list_of_death;
  if (!t)
    return NULL;
  list_of_death = t->next;
  u = t->elm;
  free (t);
  return u;
}