From c39a070f13c19c2cf30bb961426bea8c5140c9a5 Mon Sep 17 00:00:00 2001 From: haranp Date: Wed, 19 Sep 2007 23:28:26 +0000 Subject: Fix for memory corruption when reading savefiles. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2152 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/player.cc | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'crawl-ref/source/player.cc') diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 77b4fbe3e1..a7888acab3 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -30,6 +30,8 @@ #include #include +#include + #include "externs.h" #include "branch.h" @@ -5124,45 +5126,41 @@ void player::init() } } -player::~player() +player_save_info player_save_info::operator=(const player& rhs) { - delete kills; + name = rhs.your_name; + experience = rhs.experience; + experience_level = rhs.experience_level; + wizard = rhs.wizard; + species = rhs.species; + class_name = rhs.class_name; + return *this; } -bool player::is_valid() const +bool player_save_info::operator<(const player_save_info& rhs) const { - // Check if there's a name. - return (your_name[0] != 0); + return experience < rhs.experience || + (experience == rhs.experience && name < rhs.name); } -std::string player::short_desc() const +std::string player_save_info::short_desc() const { - std::string desc; - desc += your_name; - desc += ", a level "; - - char st_prn[20]; - itoa(experience_level, st_prn, 10); - desc += st_prn; - - desc += " "; - desc += species_name(species, experience_level); - desc += " "; - desc += class_name; + std::ostringstream desc; + desc << name << ", a level " << experience_level << ' ' + << species_name(species, experience_level) << ' ' + << class_name; #ifdef WIZARD if (wizard) - desc += " (WIZ)"; + desc << " (WIZ)"; #endif - return (desc); + return desc.str(); } -bool player::operator < (const player &p) const +player::~player() { - return (experience > p.experience - || (experience == p.experience && - stricmp(your_name, p.your_name) < 0)); + delete kills; } coord_def player::pos() const -- cgit v1.2.3-54-g00ecf