mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-07 13:39:55 +00:00
Merge pull request #9211 from voidlakhan/fix/savedata-dialog-getresult-output-buffer
fix(libSceSaveDataDialog.native): initialize result directory name on empty selection
This commit is contained in:
2 files changed
+33
-1
No files matched your search
@@ -44,7 +44,7 @@ int APS5_VABI sceSaveDataDialogGetResult(void* result) {
|
||||
r->result = SAVE_DATA_DIALOG_RESULT_OK;
|
||||
r->button_id = SAVE_DATA_DIALOG_BUTTON_ID_OK;
|
||||
r->user_data = g_user_data;
|
||||
if (r->dir_name != nullptr && g_dir_name[0] != '\0') {
|
||||
if (r->dir_name != nullptr) {
|
||||
std::snprintf(static_cast<SaveDataDirName*>(r->dir_name)->data,
|
||||
sizeof(SaveDataDirName::data), "%s", g_dir_name);
|
||||
}
|
||||
|
||||
@@ -106,6 +106,38 @@ int main() {
|
||||
Require(sceSaveDataDialogTerminate() == 0, "terminate");
|
||||
Require(sceSaveDataDialogTerminate() == SAVE_DATA_DIALOG_ERROR_NOT_INITIALIZED, "terminate when already terminated");
|
||||
Require(sceSaveDataDialogGetStatus() == SAVE_DATA_DIALOG_STATUS_NONE, "terminated state");
|
||||
|
||||
Require(sceSaveDataDialogInitialize() == 0, "re-initialize for empty selection");
|
||||
SaveDataDialogParam emptySelectionParam{};
|
||||
emptySelectionParam.size = sizeof(emptySelectionParam);
|
||||
emptySelectionParam.mode = 1;
|
||||
Require(sceSaveDataDialogOpen(&emptySelectionParam) == 0, "open selection dialog without items");
|
||||
Require(sceSaveDataDialogGetStatus() == SAVE_DATA_DIALOG_STATUS_FINISHED, "selection finishes immediately");
|
||||
SaveDataDirName emptySelectionDir{};
|
||||
std::memset(emptySelectionDir.data, 'X', sizeof(emptySelectionDir.data));
|
||||
SaveDataDialogResult emptySelectionResult{};
|
||||
emptySelectionResult.dir_name = &emptySelectionDir;
|
||||
Require(sceSaveDataDialogGetResult(&emptySelectionResult) == 0, "read empty selection result");
|
||||
Require(emptySelectionDir.data[0] == '\0', "empty selection directory name must be null-terminated");
|
||||
Require(emptySelectionResult.mode == emptySelectionParam.mode &&
|
||||
emptySelectionResult.result == SAVE_DATA_DIALOG_RESULT_OK, "selection result status");
|
||||
Require(sceSaveDataDialogTerminate() == 0, "terminate selection");
|
||||
|
||||
Require(sceSaveDataDialogInitialize() == 0, "re-initialize for empty result");
|
||||
param = {};
|
||||
param.size = sizeof(param);
|
||||
param.mode = SAVE_DATA_DIALOG_MODE_PROGRESS_BAR;
|
||||
Require(sceSaveDataDialogOpen(¶m) == 0, "open progress without items");
|
||||
Require(sceSaveDataDialogClose(nullptr) == 0, "close empty progress");
|
||||
Require(sceSaveDataDialogUpdateStatus() == SAVE_DATA_DIALOG_STATUS_FINISHED, "finish empty progress");
|
||||
SaveDataDirName emptySelected{};
|
||||
std::memset(emptySelected.data, 'X', sizeof(emptySelected.data));
|
||||
SaveDataDialogResult emptyResult{};
|
||||
emptyResult.dir_name = &emptySelected;
|
||||
Require(sceSaveDataDialogGetResult(&emptyResult) == 0, "read empty result");
|
||||
Require(emptySelected.data[0] == '\0', "empty directory name must be null-terminated");
|
||||
Require(sceSaveDataDialogTerminate() == 0, "terminate empty progress");
|
||||
|
||||
Require(sceSaveDataDialogProgressBarInc(0, 10) == SAVE_DATA_DIALOG_ERROR_NOT_RUNNING, "progress inc after terminate");
|
||||
Require(sceSaveDataDialogProgressBarSetValue(0, 50) == SAVE_DATA_DIALOG_ERROR_NOT_RUNNING, "progress set value after terminate");
|
||||
}
|
||||
Reference in new issue
Block a user