Move ini.pop_back() into ReadIniArgs

Both callers of ReadIniArgs need the string removed afterward.  Prior to
8fb9a0f, only the parser for `-ini` needed the string removed.  The
caller for the automatic ini file ended and destroyed the container.  As
of 8fb9a0f, the container persists.  Leaving the string in the container
causes a bad error message if the command line is rejected.

It is bad form to have ReadIniArgs pop, but the caller push.  However,
the two callers use different signatures for emplace_back(), so unifying
the push would require calling a suboptimal emplace_back.  Choose the
lesser evil of unbalanced push/pop.

Reported-by: zicodxx <https://github.com/dxx-rebirth/dxx-rebirth/issues/198>
This commit is contained in:
Kp 2016-05-31 00:42:56 +00:00
parent 660d18c312
commit 0bba26fde5

View file

@ -186,6 +186,7 @@ static void ReadIniArgs(Inilist &ini)
Arglist Args;
AppendIniArgs(ini.back().filename().c_str(), Args);
ReadCmdArgs(ini, Args);
ini.pop_back();
}
static void ReadCmdArgs(Inilist &ini, Arglist &Args)
@ -393,7 +394,6 @@ static void ReadCmdArgs(Inilist &ini, Arglist &Args)
if (ini.size() > 10)
throw nesting_depth_exceeded();
ReadIniArgs(ini);
ini.pop_back();
}
else
throw unhandled_argument(std::move(*pp));