mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-01 22:31:58 +00:00
Copy right size of save request.
This commit is contained in:
parent
951be86e62
commit
61d116b5f1
@ -38,10 +38,19 @@ u32 PSPSaveDialog::Init(int paramAddr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
u32 retval = param.SetPspParam((SceUtilitySavedataParam*)Memory::GetPointer(paramAddr));
|
||||
|
||||
int size = Memory::Read_U32(paramAddr);
|
||||
memset(&request,0,sizeof(request));
|
||||
// Only copy the right size to support different save request format
|
||||
Memory::Memcpy(&request,paramAddr,size);
|
||||
requestAddr = paramAddr;
|
||||
|
||||
u32 retval = param.SetPspParam(&request);
|
||||
|
||||
DEBUG_LOG(HLE,"sceUtilitySavedataInitStart(%08x)", paramAddr);
|
||||
DEBUG_LOG(HLE,"Mode: %i", param.GetPspParam()->mode);
|
||||
|
||||
switch (param.GetPspParam()->mode)
|
||||
switch(param.GetPspParam()->mode)
|
||||
{
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD:
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_LOAD:
|
||||
@ -312,6 +321,8 @@ void PSPSaveDialog::Update()
|
||||
case SCE_UTILITY_STATUS_FINISHED:
|
||||
status = SCE_UTILITY_STATUS_SHUTDOWN;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (status != SCE_UTILITY_STATUS_RUNNING)
|
||||
@ -632,7 +643,6 @@ void PSPSaveDialog::Update()
|
||||
else
|
||||
param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA;
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE:
|
||||
@ -641,7 +651,6 @@ void PSPSaveDialog::Update()
|
||||
else
|
||||
param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE;
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_SIZES:
|
||||
if(param.GetSizes(param.GetPspParam()))
|
||||
@ -653,28 +662,28 @@ void PSPSaveDialog::Update()
|
||||
param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_SIZES_NO_DATA;
|
||||
}
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_LIST:
|
||||
param.GetList(param.GetPspParam());
|
||||
param.GetPspParam()->result = 0;
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
default:
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
status = SCE_UTILITY_STATUS_FINISHED;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
lastButtons = buttons;
|
||||
|
||||
|
||||
if(status == SCE_UTILITY_STATUS_FINISHED)
|
||||
{
|
||||
Memory::Memcpy(requestAddr,&request,request.size);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PSPSaveDialog::Shutdown()
|
||||
|
@ -102,6 +102,8 @@ private :
|
||||
DisplayState display;
|
||||
|
||||
SavedataParam param;
|
||||
SceUtilitySavedataParam request;
|
||||
int requestAddr;
|
||||
int currentSelectedSave;
|
||||
|
||||
int yesnoChoice;
|
||||
|
@ -160,6 +160,11 @@ void Memcpy(const u32 address, const void *data, const u32 len)
|
||||
memcpy(GetPointer(address), data, len);
|
||||
}
|
||||
|
||||
void Memcpy(void *data, const u32 address, const u32 len)
|
||||
{
|
||||
memcpy(data,GetPointer(address),len);
|
||||
}
|
||||
|
||||
void GetString(std::string& _string, const u32 em_address)
|
||||
{
|
||||
char stringBuffer[2048];
|
||||
|
@ -255,6 +255,7 @@ inline const char* GetCharPointer(const u32 address) {
|
||||
|
||||
void Memset(const u32 _Address, const u8 _Data, const u32 _iLength);
|
||||
void Memcpy(const u32 _Address, const void *_Data, const u32 _iLength);
|
||||
void Memcpy(void *data, const u32 address, const u32 len);
|
||||
|
||||
template<class T>
|
||||
void ReadStruct(u32 address, T *ptr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user