diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-09-17 09:58:14 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-09-17 09:58:14 +0200 |
commit | 76b3632d13bbf57c6354bc10f67ea849f1d47279 (patch) | |
tree | b7e36fe675f6ffa01364d47ca70422c4cbbd032a /src/loadsave.cc | |
parent | 46f69654774b0eb51bd4706cf7fd9d11fbc8eec8 (diff) |
Rework player_race_mod::{title,desc} to std::string
Diffstat (limited to 'src/loadsave.cc')
-rw-r--r-- | src/loadsave.cc | 66 |
1 files changed, 44 insertions, 22 deletions
diff --git a/src/loadsave.cc b/src/loadsave.cc index 8166ab65..066e6a6e 100644 --- a/src/loadsave.cc +++ b/src/loadsave.cc @@ -221,6 +221,48 @@ static void do_string(char *str, int max, ls_flag_t flag) } } +static void load_std_string(std::string &s) +{ + s.clear(); + while (true) + { + byte u8 = sf_get(); + if (u8) + { + s += u8; + } + else + { + break; + } + } +} + +static void save_std_string(std::string &s) +{ + for (std::size_t i = 0; i < s.length(); i++) + { + assert(s[i] != 0); // Sanity check; we cannot handle NULs in strings + sf_put(s[i]); + } + sf_put(0); // NUL terminator +} + +static void do_std_string(std::string &s, ls_flag_t flag) +{ + switch(flag) + { + case ls_flag_t::LOAD: + { + load_std_string(s); + break; + } + case ls_flag_t::SAVE: + save_std_string(s); + break; + } +} + /* * Load/save flag set */ @@ -291,29 +333,9 @@ static void do_subrace(ls_flag_t flag) { player_race_mod *sr_ptr = &race_mod_info[SUBRACE_SAVE]; int i; - char buf[81]; - buf[80] = '\0'; // Make sure string is always NUL terminated - - if (flag == ls_flag_t::SAVE) - { - strncpy(buf, sr_ptr->title, 80); - } - do_string(buf, 80, flag); - if (flag == ls_flag_t::LOAD) - { - set_subrace_title(sr_ptr, buf); - } - - if (flag == ls_flag_t::SAVE) - { - strncpy(buf, sr_ptr->desc, 80); - } - do_string(buf, 80, flag); - if (flag == ls_flag_t::LOAD) - { - set_subrace_description(sr_ptr, buf); - } + do_std_string(sr_ptr->title, flag); + do_std_string(sr_ptr->description, flag); do_bool(&sr_ptr->place, flag); |