Mercurial > hg > early-roguelike
view rogue3/armor.c @ 313:2f75940cc544
Advanced Rogue 7: fix a string literal overwrite.
pick_spell() attempted to capitalize type by overwriting the first
character, changing it back later. All calls of pick_spell passed a
string literal as type, and string literals should be considered
immutable.
This has been fixed by using a separate variable for the capitalized
first character. XRogue already has a similar fix.
Reported by John Harris of @Play.
author | John "Elwin" Edwards |
---|---|
date | Tue, 19 Oct 2021 20:39:00 -0400 |
parents | 527e2150eaf0 |
children |
line wrap: on
line source
/* * This file contains misc functions for dealing with armor * @(#)armor.c 3.9 (Berkeley) 6/15/81 * * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include "curses.h" #include "rogue.h" /* * wear: * The player wants to wear something, so let him/her put it on. */ void wear() { register struct linked_list *item; register struct object *obj; if (cur_armor != NULL) { addmsg("You are already wearing some"); if (!terse) addmsg(". You'll have to take it off first"); endmsg(); after = FALSE; return; } if ((item = get_item("wear", ARMOR)) == NULL) return; obj = (struct object *) ldata(item); if (obj->o_type != ARMOR) { msg("You can't wear that."); return; } waste_time(); if (!terse) addmsg("You are now w"); else addmsg("W"); msg("earing %s.", a_names[obj->o_which]); cur_armor = obj; obj->o_flags |= ISKNOW; } /* * take_off: * Get the armor off of the players back */ void take_off() { register struct object *obj; if ((obj = cur_armor) == NULL) { if (terse) msg("Not wearing armor"); else msg("You aren't wearing any armor"); return; } if (!dropcheck(cur_armor)) return; cur_armor = NULL; if (terse) addmsg("Was"); else addmsg("You used to be "); msg(" wearing %c) %s", pack_char(obj), inv_name(obj, TRUE)); } /* * waste_time: * Do nothing but let other things happen */ void waste_time() { do_daemons(BEFORE); do_fuses(BEFORE); do_daemons(AFTER); do_fuses(AFTER); }