Copy right size of save request.

This commit is contained in:
Xele02 2012-12-24 01:22:28 +01:00
parent 951be86e62
commit 61d116b5f1
4 changed files with 26 additions and 9 deletions

View File

@ -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()

View File

@ -102,6 +102,8 @@ private :
DisplayState display;
SavedataParam param;
SceUtilitySavedataParam request;
int requestAddr;
int currentSelectedSave;
int yesnoChoice;

View File

@ -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];

View File

@ -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)