Skip to content

Commit

Permalink
SaveInfo|Refactor: Removed the old fixed length name buffer in savehe…
Browse files Browse the repository at this point in the history
…ader_t
  • Loading branch information
danij-deng committed Jun 26, 2012
1 parent 33b10c9 commit cff01e7
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 49 deletions.
5 changes: 1 addition & 4 deletions doomsday/plugins/common/include/p_savedef.h
Expand Up @@ -29,7 +29,6 @@
# define MY_SAVE_MAGIC 0x1DEAD666
# define MY_CLIENT_SAVE_MAGIC 0x2DEAD666
# define MY_SAVE_VERSION 10
# define SAVESTRINGSIZE 24
# define CONSISTENCY 0x2c
# define SAVEGAMENAME "DoomSav"
# define CLIENTSAVEGAMENAME "DoomCl"
Expand All @@ -42,7 +41,6 @@
# define MY_SAVE_MAGIC 0x1D6420F4
# define MY_CLIENT_SAVE_MAGIC 0x2D6420F4
# define MY_SAVE_VERSION 10
# define SAVESTRINGSIZE 24
# define CONSISTENCY 0x2c
# define SAVEGAMENAME "D64Sav"
# define CLIENTSAVEGAMENAME "D64Cl"
Expand All @@ -55,7 +53,6 @@
# define MY_SAVE_MAGIC 0x7D9A12C5
# define MY_CLIENT_SAVE_MAGIC 0x1062AF43
# define MY_SAVE_VERSION 10
# define SAVESTRINGSIZE 24
# define CONSISTENCY 0x9d
# define SAVEGAMENAME "HticSav"
# define CLIENTSAVEGAMENAME "HticCl"
Expand All @@ -68,13 +65,13 @@
# define MY_SAVE_MAGIC 0x1B17CC00
# define MY_CLIENT_SAVE_MAGIC 0x2B17CC00
# define MY_SAVE_VERSION 10
# define SAVESTRINGSIZE 24
# define SAVEGAMENAME "hex"
# define CLIENTSAVEGAMENAME "hexencl"
# define SAVEGAMEEXTENSION "hxs"
# define SAVEGAME_DEFAULT_DIR "hexndata"

# define MOBJ_XX_PLAYER -2

# define BASE_SLOT 6
# define AUTO_SLOT 7

Expand Down
5 changes: 2 additions & 3 deletions doomsday/plugins/common/include/saveinfo.h
Expand Up @@ -24,13 +24,12 @@
#define LIBCOMMON_SAVEINFO_H

#include "doomsday.h"
#include "p_savedef.h"
#include "common.h"

typedef struct saveheader_s {
int magic;
int version;
gamemode_t gameMode;
char name[SAVESTRINGSIZE];
byte skill;
byte episode;
byte map;
Expand Down Expand Up @@ -67,7 +66,7 @@ void SaveInfo_SetFilePath(SaveInfo* info, ddstring_t* newFilePath);

void SaveInfo_SetGameId(SaveInfo* info, uint newGameId);

void SaveInfo_SetName(SaveInfo* info, const char* newName);
void SaveInfo_SetName(SaveInfo* info, const ddstring_t* newName);

void SaveInfo_Configure(SaveInfo* info);

Expand Down
32 changes: 12 additions & 20 deletions doomsday/plugins/common/src/p_saveg.c
Expand Up @@ -5283,21 +5283,15 @@ static void unarchiveMap(void)
#endif
}

typedef struct savegameparams_s {
const ddstring_t* path;
const char* name;
} savegameworkerparams_t;

static int saveGameWorker(void* parameters)
{
savegameworkerparams_t* parm = parameters;
SaveInfo* saveInfo;
SaveInfo* saveInfo = parameters;

#if _DEBUG
VERBOSE( Con_Message("SV_SaveGame: Attempting save game to \"%s\".\n", Str_Text(parm->path)) )
VERBOSE( Con_Message("SV_SaveGame: Attempting save game to \"%s\".\n", Str_Text(SaveInfo_FilePath(saveInfo))) )
#endif

if(!openGameSaveFile(Str_Text(parm->path), true))
if(!openGameSaveFile(Str_Text(SaveInfo_FilePath(saveInfo)), true))
{
Con_BusyWorkerEnd();
return SV_INVALIDFILENAME; // No success.
Expand All @@ -5306,10 +5300,6 @@ static int saveGameWorker(void* parameters)
playerHeaderOK = false; // Uninitialized.

// Write the game session header.
saveInfo = SaveInfo_New();
SaveInfo_SetName(saveInfo, parm->name);
SaveInfo_SetGameId(saveInfo, SV_GenerateGameId());
SaveInfo_Configure(saveInfo);
SV_SaveInfo_Write(saveInfo);

#if __JHEXEN__
Expand Down Expand Up @@ -5377,8 +5367,6 @@ static int saveGameWorker(void* parameters)
SV_CloseFile();
#endif

SaveInfo_Delete(saveInfo);

Con_BusyWorkerEnd();
return SV_OK;
}
Expand All @@ -5390,8 +5378,8 @@ boolean SV_SaveGame(int slot, const char* name)
#else
const int logicalSlot = slot;
#endif
savegameworkerparams_t params;
ddstring_t path;
SaveInfo* saveInfo;
ddstring_t path, nameStr;
int saveError;
assert(name);

Expand All @@ -5411,12 +5399,16 @@ boolean SV_SaveGame(int slot, const char* name)
Str_Init(&path);
SV_ComposeSavePathForSlot(logicalSlot, &path);

params.path = &path;
params.name = name;
saveInfo = SaveInfo_NewWithFilePath(&path);
SaveInfo_SetName(saveInfo, Str_InitStatic(&nameStr, name));
SaveInfo_SetGameId(saveInfo, SV_GenerateGameId());
SaveInfo_Configure(saveInfo);

/// @todo Use progress bar mode and update progress during the setup.
saveError = Con_Busy(BUSYF_ACTIVITY | /*BUSYF_PROGRESS_BAR |*/ (verbose? BUSYF_CONSOLE_OUTPUT : 0),
"Saving game...", saveGameWorker, &params);
"Saving game...", saveGameWorker, saveInfo);

SaveInfo_Delete(saveInfo);

if(!saveError)
{
Expand Down
36 changes: 16 additions & 20 deletions doomsday/plugins/common/src/saveinfo.c
Expand Up @@ -93,10 +93,10 @@ void SaveInfo_SetGameId(SaveInfo* info, uint newGameId)
info->header.gameId = newGameId;
}

void SaveInfo_SetName(SaveInfo* info, const char* newName)
void SaveInfo_SetName(SaveInfo* info, const ddstring_t* newName)
{
assert(info);
dd_snprintf(info->header.name, SAVESTRINGSIZE, "%s", newName);
Str_CopyOrClear(&info->name, newName);
}

void SaveInfo_Configure(SaveInfo* info)
Expand Down Expand Up @@ -214,12 +214,7 @@ void SaveInfo_Write(SaveInfo* saveInfo, Writer* writer)
Writer_WriteInt32(writer, info->magic);
Writer_WriteInt32(writer, info->version);
Writer_WriteInt32(writer, info->gameMode);

{
ddstring_t name;
Str_InitStatic(&name, info->name);
Str_Write(&name, writer);
}
Str_Write(&saveInfo->name, writer);

Writer_WriteByte(writer, info->skill);
Writer_WriteByte(writer, info->episode);
Expand Down Expand Up @@ -288,19 +283,17 @@ void SaveInfo_Read(SaveInfo* saveInfo, Reader* reader)

if(info->version >= 10)
{
ddstring_t buf;
Str_InitStd(&buf);
Str_Read(&buf, reader);
memcpy(info->name, Str_Text(&buf), SAVESTRINGSIZE);
info->name[SAVESTRINGSIZE] = '\0';
Str_Free(&buf);
Str_Read(&saveInfo->name, reader);
}
else
{
// Older formats use a fixed-length name (24 characters).
Reader_Read(reader, info->name, SAVESTRINGSIZE);
#define OLD_NAME_LENGTH 24
char buf[OLD_NAME_LENGTH];
Reader_Read(reader, buf, OLD_NAME_LENGTH);
Str_Set(&saveInfo->name, buf);
#undef OLD_NAME_LENGTH
}
Str_Set(&saveInfo->name, info->name);

info->skill = Reader_ReadByte(reader);
info->episode = Reader_ReadByte(reader);
Expand Down Expand Up @@ -343,16 +336,18 @@ void SaveInfo_Read(SaveInfo* saveInfo, Reader* reader)
#if __JHEXEN__
void SaveInfo_Read_Hx_v9(SaveInfo* saveInfo, Reader* reader)
{
# define HXS_VERSION_TEXT "HXS Ver " // Do not change me!
# define HXS_VERSION_TEXT "HXS Ver " // Do not change me!
# define HXS_VERSION_TEXT_LENGTH 16
# define HXS_NAME_LENGTH 24

char verText[HXS_VERSION_TEXT_LENGTH];
char verText[HXS_VERSION_TEXT_LENGTH], name[HXS_NAME_LENGTH];
ddstring_t nameStr;
saveheader_t* info;
assert(saveInfo);

info = &saveInfo->header;
Reader_Read(reader, &info->name, SAVESTRINGSIZE);
Str_Set(&saveInfo->name, info->name);
Reader_Read(reader, name, HXS_NAME_LENGTH);
SaveInfo_SetName(saveInfo, Str_InitStatic(&nameStr, name));
Reader_Read(reader, &verText, HXS_VERSION_TEXT_LENGTH);
info->version = atoi(&verText[8]);

Expand All @@ -371,6 +366,7 @@ void SaveInfo_Read_Hx_v9(SaveInfo* saveInfo, Reader* reader)
info->gameMode = gameMode; // Assume the current mode.
info->gameId = 0; // None.

# undef HXS_NAME_LENGTH
# undef HXS_VERSION_TEXT_LENGTH
# undef HXS_VERSION_TEXT
}
Expand Down
7 changes: 6 additions & 1 deletion doomsday/plugins/jdoom/src/p_oldsvg.c
Expand Up @@ -897,16 +897,21 @@ boolean SV_v19_LoadGame(SaveInfo* info)

boolean SV_v19_Recognise(SaveInfo* info)
{
#define SAVESTRINGSIZE 24

if(!info || Str_IsEmpty(SaveInfo_FilePath(info))) return false;

if(SV_OpenFile(Str_Text(SaveInfo_FilePath(info)), "r"))
{
char nameBuffer[SAVESTRINGSIZE];
ddstring_t nameStr;
lzRead(nameBuffer, SAVESTRINGSIZE, SV_File());
nameBuffer[SAVESTRINGSIZE - 1] = 0;
SaveInfo_SetName(info, nameBuffer);
SaveInfo_SetName(info, Str_InitStatic(&nameStr, nameBuffer));
SV_CloseFile();
return true;
}
return false;

#undef SAVESTRINGSIZE
}
7 changes: 6 additions & 1 deletion doomsday/plugins/jheretic/src/p_oldsvg.c
Expand Up @@ -892,16 +892,21 @@ boolean SV_v13_LoadGame(SaveInfo* info)

boolean SV_v13_Recognise(SaveInfo* info)
{
#define SAVESTRINGSIZE 24

if(!info || Str_IsEmpty(SaveInfo_FilePath(info))) return false;

if(SV_OpenFile(Str_Text(SaveInfo_FilePath(info)), "r"))
{
char nameBuffer[SAVESTRINGSIZE];
ddstring_t nameStr;
lzRead(nameBuffer, SAVESTRINGSIZE, SV_File());
nameBuffer[SAVESTRINGSIZE - 1] = 0;
SaveInfo_SetName(info, nameBuffer);
SaveInfo_SetName(info, Str_InitStatic(&nameStr, nameBuffer));
SV_CloseFile();
return true;
}
return false;

#undef SAVESTRINGSIZE
}

0 comments on commit cff01e7

Please sign in to comment.