From 1c4c33513b1a3bef461bcfb4350bcfe600e56ab9 Mon Sep 17 00:00:00 2001 From: Kp Date: Mon, 12 Jan 2015 00:26:03 +0000 Subject: [PATCH] Copy secret level name without modification --- similar/main/mission.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/similar/main/mission.cpp b/similar/main/mission.cpp index 9a83baf7f..cbe989893 100644 --- a/similar/main/mission.cpp +++ b/similar/main/mission.cpp @@ -861,26 +861,30 @@ static int load_mission(const mle *mission) } else if (istok(buf,"num_secrets")) { if ((v=get_value(buf))!=NULL) { - N_secret_levels = atoi(v); - - Assert(N_secret_levels <= MAX_SECRET_LEVELS_PER_MISSION); - N_secret_levels = min(N_secret_levels, MAX_SECRET_LEVELS_PER_MISSION); - + char *ip; + unsigned long n_levels = strtoul(v, &ip, 10); + Assert(n_levels <= MAX_SECRET_LEVELS_PER_MISSION); + N_secret_levels = min(n_levels, *ip ? 0ul : MAX_SECRET_LEVELS_PER_MISSION); Secret_level_names = make_unique(N_secret_levels); Secret_level_table = make_unique(N_secret_levels); for (int i=0;iLast_level) + const auto &line = buf.line(); + const auto lb = line.begin(); + const auto t = strchr(lb, ','); + if (!t) + break; + auto a = [](char c) { + return isspace(static_cast(c)); + }; + auto s = std::find_if(lb, t, a); + if (Secret_level_names[i].copy_if(line, std::distance(lb, s))) + { + unsigned long ls = strtoul(t + 1, &ip, 10); + if (ls < 1 || ls > Last_level) break; + Secret_level_table[i] = ls; Last_secret_level--; } else