Mercurial > hg > early-roguelike
view rogue4/list.c @ 124:d10fc4a065ac
rogue5: ignore the file name stored in the save file.
state.c had put file_name into the save file. The saved value was used
to overwrite file_name on restore. If the save file had been renamed,
unlink(file_name) would then fail, because file_name held the old name.
To avoid breaking savefile compatibility, file_name is still saved, but
it is read back into a temporary buffer and then ignored.
I thought I fixed this already.
author | John "Elwin" Edwards |
---|---|
date | Fri, 16 Jan 2015 13:42:30 -0500 |
parents | 9535a08ddc39 |
children | 1b73a8641b37 |
line wrap: on
line source
/* * Functions for dealing with linked lists of goodies * * @(#)list.c 4.7 (Berkeley) 12/19/81 * * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include <stdlib.h> #include <curses.h> #include "rogue.h" /* * detach: * Takes an item out of whatever linked list it might be in */ _detach(list, item) register THING **list, *item; { if (*list == item) *list = next(item); if (prev(item) != NULL) item->l_prev->l_next = next(item); if (next(item) != NULL) item->l_next->l_prev = prev(item); item->l_next = NULL; item->l_prev = NULL; } /* * _attach: * add an item to the head of a list */ _attach(list, item) register THING **list, *item; { if (*list != NULL) { item->l_next = *list; (*list)->l_prev = item; item->l_prev = NULL; } else { item->l_next = NULL; item->l_prev = NULL; } *list = item; } /* * _free_list: * Throw the whole blamed thing away */ _free_list(ptr) register THING **ptr; { register THING *item; while (*ptr != NULL) { item = *ptr; *ptr = next(item); discard(item); } } /* * discard: * Free up an item */ discard(item) register THING *item; { total--; free((char *) item); } /* * new_item * Get a new item with a specified size */ THING * new_item() { register THING *item; if ((item = calloc(1, sizeof *item)) == NULL) msg("ran out of memory after %d items", total); else total++; item->l_next = item->l_prev = NULL; return item; }