From 07e8d475b3d2245d609bc3f25460fbedfa47caa5 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 23 Oct 2013 16:07:56 +1000 Subject: [PATCH 1/3] Use name count instead of data count for grabbing focus. --- Core/Dialog/SavedataParam.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 4d408bbe7a..8d271f7452 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -1294,14 +1294,14 @@ int SavedataParam::GetFirstListSave() int SavedataParam::GetLastListSave() { - return saveDataListCount - 1; + return saveNameListDataCount - 1; } int SavedataParam::GetLatestSave() { int idx = 0; time_t idxTime = 0; - for (int i = 0; i < saveDataListCount; ++i) + for (int i = 0; i < saveNameListDataCount; ++i) { time_t thisTime = mktime(&saveDataList[i].modif_time); if (idxTime < thisTime) @@ -1317,7 +1317,7 @@ int SavedataParam::GetOldestSave() { int idx = 0; time_t idxTime = 0; - for (int i = 0; i < saveDataListCount; ++i) + for (int i = 0; i < saveNameListDataCount; ++i) { time_t thisTime = mktime(&saveDataList[i].modif_time); if (idxTime > thisTime) @@ -1332,7 +1332,7 @@ int SavedataParam::GetOldestSave() int SavedataParam::GetFirstDataSave() { int idx = 0; - for (int i = 0; i < saveDataListCount; ++i) + for (int i = 0; i < saveNameListDataCount; ++i) { if (saveDataList[i].size != 0) { @@ -1346,7 +1346,7 @@ int SavedataParam::GetFirstDataSave() int SavedataParam::GetLastDataSave() { int idx = 0; - for (int i = saveDataListCount; i > 0; ) + for (int i = saveNameListDataCount; i > 0; ) { --i; if (saveDataList[i].size != 0) @@ -1361,7 +1361,7 @@ int SavedataParam::GetLastDataSave() int SavedataParam::GetFirstEmptySave() { int idx = 0; - for (int i = 0; i < saveDataListCount; ++i) + for (int i = 0; i < saveNameListDataCount; ++i) { if (saveDataList[i].size == 0) { @@ -1375,7 +1375,7 @@ int SavedataParam::GetFirstEmptySave() int SavedataParam::GetLastEmptySave() { int idx = 0; - for (int i = saveDataListCount; i > 0; ) + for (int i = saveNameListDataCount; i > 0; ) { --i; if (saveDataList[i].size == 0) From 1af2f9995965c49982a86d9503e77d9743d5f17b Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 23 Oct 2013 23:19:50 +1000 Subject: [PATCH 2/3] Initialise everything in the SaveFileInfo to 0. We were getting std::tm initialised to random values which non-existent files become the preferred save. --- Core/Dialog/SavedataParam.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Core/Dialog/SavedataParam.h b/Core/Dialog/SavedataParam.h index 1b52cae668..9763605fa6 100644 --- a/Core/Dialog/SavedataParam.h +++ b/Core/Dialog/SavedataParam.h @@ -254,6 +254,15 @@ struct SaveFileInfo int textureWidth; int textureHeight; + SaveFileInfo() : size(0), saveName(""), idx(0), + textureData(0), textureWidth(0), textureHeight(0) + { + memset(title, 0, 128); + memset(saveTitle, 0, 128); + memset(saveDetail, 0, 1024); + modif_time = {0}; + } + void DoState(PointerWrap &p) { auto s = p.Section("SaveFileInfo", 1); From 9e20e1a2978921cd29ecefebec7cf4681226f6bf Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 23 Oct 2013 23:25:25 +1000 Subject: [PATCH 3/3] Fix time compares in save focus. Was breaking platforms (like QNX) where time is stored as a 64-bit unsigned value (nanoseconds). --- Core/Dialog/SavedataParam.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 8d271f7452..d559ce9160 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -1303,8 +1303,10 @@ int SavedataParam::GetLatestSave() time_t idxTime = 0; for (int i = 0; i < saveNameListDataCount; ++i) { + if (saveDataList[i].size == 0) + continue; time_t thisTime = mktime(&saveDataList[i].modif_time); - if (idxTime < thisTime) + if ((s64)idxTime < (s64)thisTime) { idx = i; idxTime = thisTime; @@ -1319,8 +1321,10 @@ int SavedataParam::GetOldestSave() time_t idxTime = 0; for (int i = 0; i < saveNameListDataCount; ++i) { + if (saveDataList[i].size == 0) + continue; time_t thisTime = mktime(&saveDataList[i].modif_time); - if (idxTime > thisTime) + if ((s64)idxTime > (s64)thisTime) { idx = i; idxTime = thisTime;