Fix inverted sense of -use_players_dir

Fixes: 4d483ca88f ("Simplify use of SysUsePlayersDir")
This commit is contained in:
Kp 2016-07-22 02:25:17 +00:00
parent d67ada45ef
commit b0821cff55
3 changed files with 12 additions and 9 deletions

View file

@ -74,7 +74,7 @@ struct CArg : prohibit_void_ptr<CArg>
#endif
bool SysShowCmdHelp;
bool SysLowMem;
uint8_t SysUsePlayersDir;
int8_t SysUsePlayersDir;
bool SysAutoRecordDemo;
bool SysWindow;
bool SysAutoDemo;
@ -162,7 +162,7 @@ __attribute_format_arg(1)
static inline const char *PLAYER_DIRECTORY_STRING(const char *s);
static inline const char *PLAYER_DIRECTORY_STRING(const char *s)
{
return &s[CGameArg.SysUsePlayersDir];
return &s[CGameArg.SysUsePlayersDir + sizeof(PLAYER_DIRECTORY_TEXT) - 1];
}
#define PLAYER_DIRECTORY_STRING(S) ((PLAYER_DIRECTORY_STRING)(PLAYER_DIRECTORY_TEXT S))
}

View file

@ -536,17 +536,22 @@ static int main(int argc, char *argv[])
{
char filename[sizeof(PLAYER_DIRECTORY_TEXT) + CALLSIGN_LEN + 4];
/* Step over the literal PLAYER_DIRECTORY_TEXT when it is
* present. Point at &filename[0] when
* PLAYER_DIRECTORY_TEXT is absent.
*/
const auto b = &filename[-CGameArg.SysUsePlayersDir];
snprintf(filename, sizeof(filename), PLAYER_DIRECTORY_STRING("%.12s"), CGameArg.SysPilot.c_str());
/* The pilot name is never used after this. Clear it to
* free the allocated memory, if any.
*/
CGameArg.SysPilot.clear();
const uintptr_t SysUsePlayersDir = CGameArg.SysUsePlayersDir;
auto j = SysUsePlayersDir;
for (const auto &facet = std::use_facet<std::ctype<char>>(std::locale::classic()); char &c = filename[j]; ++j)
auto p = b;
for (const auto &facet = std::use_facet<std::ctype<char>>(std::locale::classic()); char &c = *p; ++p)
{
c = facet.tolower(static_cast<uint8_t>(c));
}
auto j = p - filename;
if (j < sizeof(filename) - 4 && (j <= 4 || strcmp(&filename[j - 4], ".plr"))) // if player hasn't specified .plr extension in argument, add it
{
strcpy(&filename[j], ".plr");
@ -554,9 +559,7 @@ static int main(int argc, char *argv[])
}
if(PHYSFSX_exists(filename,0))
{
filename[j - 4] = 0;
const auto b = &filename[SysUsePlayersDir];
get_local_player().callsign.copy(b, std::distance(b, end(filename)));
get_local_player().callsign.copy(b, std::distance(b, &filename[j - 4]));
read_player_file();
WriteConfigFile();
}

View file

@ -218,7 +218,7 @@ static void ReadCmdArgs(Inilist &ini, Arglist &Args)
#endif
}
else if (!d_stricmp(p, "-use_players_dir"))
CGameArg.SysUsePlayersDir = sizeof(PLAYER_DIRECTORY_TEXT) - 1;
CGameArg.SysUsePlayersDir = static_cast<int8_t>(- (sizeof(PLAYER_DIRECTORY_TEXT) - 1));
else if (!d_stricmp(p, "-lowmem"))
CGameArg.SysLowMem = true;
else if (!d_stricmp(p, "-pilot"))