mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
c4fdba1e2e
commit
6eee88e356
|
@ -168,7 +168,7 @@ var
|
|||
|
||||
Procedure DumpExceptionCallStack(E: Exception);
|
||||
|
||||
Function FetchMount(path,point:PChar):Integer;
|
||||
Function FetchMount(path,point:PChar;mode:Integer):Integer;
|
||||
Function UnMountPath(path:PChar):Integer;
|
||||
|
||||
function _parse_filename(filename:PChar):RawByteString;
|
||||
|
@ -293,11 +293,23 @@ var
|
|||
const
|
||||
SCE_SAVE_DATA_ERROR_PARAMETER =-2137063424; // 0x809F0000
|
||||
SCE_SAVE_DATA_ERROR_EXISTS =-2137063417; // 0x809F0007
|
||||
SCE_SAVE_DATA_ERROR_NOT_FOUND =-2137063416; // 0x809f0008
|
||||
SCE_SAVE_DATA_ERROR_MOUNT_FULL =-2137063412; // 0x809F000C
|
||||
SCE_SAVE_DATA_ERROR_NOT_MOUNTED=-2137063420; // 0x809F0004
|
||||
SCE_SAVE_DATA_ERROR_INTERNAL =-2137063413; // 0x809f000b
|
||||
SCE_SAVE_DATA_ERROR_BUSY =-2137063421; // 0x809f0003
|
||||
|
||||
Function FetchMount(path,point:PChar):Integer;
|
||||
|
||||
SCE_SAVE_DATA_MOUNT_MODE_RDONLY =1; //Read-only
|
||||
SCE_SAVE_DATA_MOUNT_MODE_RDWR =2; //Read/write-enabled
|
||||
SCE_SAVE_DATA_MOUNT_MODE_CREATE =4; //Create new (error if save data directory already exists)
|
||||
SCE_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF=8; //Turn off corrupt flag (not recommended)
|
||||
SCE_SAVE_DATA_MOUNT_MODE_COPY_ICON =16; //Copy save_data.png in package as icon when newly creating save data
|
||||
SCE_SAVE_DATA_MOUNT_MODE_CREATE2 =32; //Create new (mount save data directory if it already exists)
|
||||
|
||||
Function FetchMount(path,point:PChar;mode:Integer):Integer;
|
||||
var
|
||||
sp:RawByteString;
|
||||
s:TMountDir;
|
||||
i,m:Integer;
|
||||
Label
|
||||
|
@ -312,6 +324,22 @@ begin
|
|||
i:=IndexChar(s,MOUNT_MAXSIZE,#0);
|
||||
if (i=0) then Exit(SCE_SAVE_DATA_ERROR_PARAMETER);
|
||||
|
||||
sp:=IncludeTrailingPathDelimiter(ps4_app.save_path)+s;
|
||||
|
||||
if (mode and SCE_SAVE_DATA_MOUNT_MODE_CREATE2)<>0 then
|
||||
begin
|
||||
if not ForceDirectories(ps4_app.save_path) then Exit(SCE_SAVE_DATA_ERROR_INTERNAL);
|
||||
CreateDir(sp);
|
||||
end else
|
||||
if (mode and SCE_SAVE_DATA_MOUNT_MODE_CREATE)<>0 then
|
||||
begin
|
||||
if not ForceDirectories(ps4_app.save_path) then Exit(SCE_SAVE_DATA_ERROR_INTERNAL);
|
||||
if not CreateDir(sp) then Exit(SCE_SAVE_DATA_ERROR_EXISTS);
|
||||
end else
|
||||
begin
|
||||
if not DirectoryExists(sp) then Exit(SCE_SAVE_DATA_ERROR_NOT_FOUND);
|
||||
end;
|
||||
|
||||
rwlock_wrlock(FMounts_lock);
|
||||
|
||||
m:=-1;
|
||||
|
@ -324,7 +352,7 @@ begin
|
|||
begin
|
||||
if (FMounts[i]=s) then
|
||||
begin
|
||||
Result:=SCE_SAVE_DATA_ERROR_EXISTS;
|
||||
Result:=SCE_SAVE_DATA_ERROR_BUSY;
|
||||
goto _exit;
|
||||
end;
|
||||
end;
|
||||
|
@ -428,7 +456,7 @@ begin
|
|||
|
||||
s:=IncludeTrailingPathDelimiter(ps4_app.save_path)+s;
|
||||
|
||||
if not ForceDirectories(s) then Exit('');
|
||||
if not FileExists(s) then Exit('');
|
||||
|
||||
Result:=PathConcat(s,filename);
|
||||
end;
|
||||
|
|
|
@ -27,12 +27,25 @@ type
|
|||
function ps4_sceAppContentInitialize(initParam:PSceAppContentInitParam;bootParam:PSceAppContentBootParam):Integer; SysV_ABI_CDecl;
|
||||
begin
|
||||
Writeln('sceAppContentInitialize');
|
||||
|
||||
if (initParam<>nil) then
|
||||
begin
|
||||
initParam^:=Default(SceAppContentInitParam);
|
||||
end;
|
||||
|
||||
if (bootParam<>nil) then
|
||||
begin
|
||||
bootParam^:=Default(SceAppContentBootParam);
|
||||
end;
|
||||
|
||||
Result:=0;
|
||||
end;
|
||||
|
||||
Const
|
||||
SCE_APP_CONTENT_APPPARAM_ID_SKU_FLAG=0;
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_1=1;
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_2=2;
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_3=3;
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_4=4;
|
||||
|
||||
SCE_APP_CONTENT_ERROR_PARAMETER=-2133262334;//0x80D90002
|
||||
|
@ -47,7 +60,8 @@ begin
|
|||
Writeln('sceAppContentAppParamGetInt:',paramId);
|
||||
Case SCE_APP_CONTENT_APPPARAM_ID_SKU_FLAG of
|
||||
SCE_APP_CONTENT_APPPARAM_ID_SKU_FLAG:Result:=SCE_APP_CONTENT_APPPARAM_SKU_FLAG_FULL;
|
||||
1..4:Result:=SCE_APP_CONTENT_ADDCONT_DOWNLOAD_STATUS_INSTALLED;
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_1..
|
||||
SCE_APP_CONTENT_APPPARAM_ID_USER_DEFINED_PARAM_4:Result:=0;
|
||||
else
|
||||
Result:=SCE_APP_CONTENT_ERROR_PARAMETER;
|
||||
end;
|
||||
|
|
|
@ -282,20 +282,45 @@ const
|
|||
SCE_SAVE_DATA_ERROR_MOUNT_FULL =-2137063412; // 0x809F000C
|
||||
SCE_SAVE_DATA_ERROR_NOT_MOUNTED=-2137063420; // 0x809F0004
|
||||
|
||||
SCE_SAVE_DATA_MOUNT_MODE_RDONLY =1; //Read-only
|
||||
SCE_SAVE_DATA_MOUNT_MODE_RDWR =2; //Read/write-enabled
|
||||
SCE_SAVE_DATA_MOUNT_MODE_CREATE =4; //Create new (error if save data directory already exists)
|
||||
SCE_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF=8; //Turn off corrupt flag (not recommended)
|
||||
SCE_SAVE_DATA_MOUNT_MODE_COPY_ICON =16; //Copy save_data.png in package as icon when newly creating save data
|
||||
SCE_SAVE_DATA_MOUNT_MODE_CREATE2 =32; //Create new (mount save data directory if it already exists)
|
||||
|
||||
function ps4_sceSaveDataMount(mount:pSceSaveDataMount;mountResult:pSceSaveDataMountResult):Integer; SysV_ABI_CDecl;
|
||||
begin
|
||||
if (mount=nil) or (mountResult=nil) then Exit(SCE_SAVE_DATA_ERROR_PARAMETER);
|
||||
mountResult^:=Default(SceSaveDataMountResult);
|
||||
|
||||
_sig_lock;
|
||||
Result:=FetchMount(PChar(mount^.dirName),@mountResult^.mountPoint);
|
||||
Result:=FetchMount(PChar(mount^.dirName),@mountResult^.mountPoint,mount^.mountMode);
|
||||
_sig_unlock;
|
||||
|
||||
if (Result=0) and
|
||||
((mount^.mountMode and (SCE_SAVE_DATA_MOUNT_MODE_CREATE or SCE_SAVE_DATA_MOUNT_MODE_CREATE2))<>0) then
|
||||
begin
|
||||
mountResult^.mountStatus:=SCE_SAVE_DATA_MOUNT_STATUS_CREATED;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function ps4_sceSaveDataMount2(mount:PSceSaveDataMount2;mountResult:PSceSaveDataMountResult):Integer; SysV_ABI_CDecl;
|
||||
begin
|
||||
if (mount=nil) or (mountResult=nil) then Exit(SCE_SAVE_DATA_ERROR_PARAMETER);
|
||||
mountResult^:=Default(SceSaveDataMountResult);
|
||||
|
||||
_sig_lock;
|
||||
Result:=FetchMount(PChar(mount^.dirName),@mountResult^.mountPoint);
|
||||
Result:=FetchMount(PChar(mount^.dirName),@mountResult^.mountPoint,mount^.mountMode);
|
||||
_sig_unlock;
|
||||
|
||||
if (Result=0) and
|
||||
((mount^.mountMode and (SCE_SAVE_DATA_MOUNT_MODE_CREATE or SCE_SAVE_DATA_MOUNT_MODE_CREATE2))<>0) then
|
||||
begin
|
||||
mountResult^.mountStatus:=SCE_SAVE_DATA_MOUNT_STATUS_CREATED;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function ps4_sceSaveDataUmount(mountPoint:PSceSaveDataMountPoint):Integer; SysV_ABI_CDecl;
|
||||
|
@ -312,6 +337,8 @@ begin
|
|||
if (info<>nil) then
|
||||
begin
|
||||
info^:=Default(SceSaveDataMountInfo);
|
||||
info^.blocks :=100000;
|
||||
info^.freeBlocks:=100000;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in New Issue