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 #endif
bool SysShowCmdHelp; bool SysShowCmdHelp;
bool SysLowMem; bool SysLowMem;
uint8_t SysUsePlayersDir; int8_t SysUsePlayersDir;
bool SysAutoRecordDemo; bool SysAutoRecordDemo;
bool SysWindow; bool SysWindow;
bool SysAutoDemo; 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);
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)) #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]; 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()); snprintf(filename, sizeof(filename), PLAYER_DIRECTORY_STRING("%.12s"), CGameArg.SysPilot.c_str());
/* The pilot name is never used after this. Clear it to /* The pilot name is never used after this. Clear it to
* free the allocated memory, if any. * free the allocated memory, if any.
*/ */
CGameArg.SysPilot.clear(); CGameArg.SysPilot.clear();
const uintptr_t SysUsePlayersDir = CGameArg.SysUsePlayersDir; auto p = b;
auto j = SysUsePlayersDir; for (const auto &facet = std::use_facet<std::ctype<char>>(std::locale::classic()); char &c = *p; ++p)
for (const auto &facet = std::use_facet<std::ctype<char>>(std::locale::classic()); char &c = filename[j]; ++j)
{ {
c = facet.tolower(static_cast<uint8_t>(c)); 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 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"); strcpy(&filename[j], ".plr");
@ -554,9 +559,7 @@ static int main(int argc, char *argv[])
} }
if(PHYSFSX_exists(filename,0)) if(PHYSFSX_exists(filename,0))
{ {
filename[j - 4] = 0; get_local_player().callsign.copy(b, std::distance(b, &filename[j - 4]));
const auto b = &filename[SysUsePlayersDir];
get_local_player().callsign.copy(b, std::distance(b, end(filename)));
read_player_file(); read_player_file();
WriteConfigFile(); WriteConfigFile();
} }

View file

@ -218,7 +218,7 @@ static void ReadCmdArgs(Inilist &ini, Arglist &Args)
#endif #endif
} }
else if (!d_stricmp(p, "-use_players_dir")) 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")) else if (!d_stricmp(p, "-lowmem"))
CGameArg.SysLowMem = true; CGameArg.SysLowMem = true;
else if (!d_stricmp(p, "-pilot")) else if (!d_stricmp(p, "-pilot"))