summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/player.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-19 23:28:26 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-19 23:28:26 +0000
commitc39a070f13c19c2cf30bb961426bea8c5140c9a5 (patch)
tree636060955c9a3d7cc61aebc0b181c541d9e6024b /crawl-ref/source/player.cc
parent7b52c20fd2613f4597a5b429c604369d393367ec (diff)
downloadcrawl-ref-c39a070f13c19c2cf30bb961426bea8c5140c9a5.tar.gz
crawl-ref-c39a070f13c19c2cf30bb961426bea8c5140c9a5.zip
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
Diffstat (limited to 'crawl-ref/source/player.cc')
-rw-r--r--crawl-ref/source/player.cc46
1 files changed, 22 insertions, 24 deletions
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 <math.h>
#include <ctype.h>
+#include <sstream>
+
#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