@ -10,9 +10,10 @@
# include "common/make_unique.h"
# include "common/math_util.h"
# include "core/file_sys/archive_savedata.h"
# include "core/file_sys/archive_extsavedata.h"
# include "core/file_sys/archive_backend.h"
# include "core/file_sys/archive_extsavedata.h"
# include "core/file_sys/archive_romfs.h"
# include "core/file_sys/archive_savedata.h"
# include "core/file_sys/archive_sdmc.h"
# include "core/file_sys/directory_backend.h"
# include "core/hle/service/fs/archive.h"
@ -50,6 +51,9 @@ enum class FileCommand : u32 {
SetAttributes = 0x08070040 ,
Close = 0x08080000 ,
Flush = 0x08090000 ,
SetPriority = 0x080A0040 ,
GetPriority = 0x080B0000 ,
OpenLinkFile = 0x080C0000 ,
} ;
// Command to access directory
@ -75,12 +79,13 @@ public:
class File : public Kernel : : Session {
public :
File ( std : : unique_ptr < FileSys : : FileBackend > & & backend , const FileSys : : Path & path )
: path ( path ) , backend ( std : : move ( backend ) ) {
: path ( path ) , backend ( std : : move ( backend ) ) , priority ( 0 ) {
}
std : : string GetName ( ) const override { return " Path: " + path . DebugStr ( ) ; }
FileSys : : Path path ; ///< Path of the file
u32 priority ; ///< Priority of the file. TODO(Subv): Find out what this means
std : : unique_ptr < FileSys : : FileBackend > backend ; ///< File backend interface
ResultVal < bool > SyncRequest ( ) override {
@ -145,6 +150,27 @@ public:
break ;
}
case FileCommand : : OpenLinkFile :
{
LOG_WARNING ( Service_FS , " (STUBBED) File command OpenLinkFile %s " , GetName ( ) . c_str ( ) ) ;
cmd_buff [ 3 ] = GetHandle ( ) ;
break ;
}
case FileCommand : : SetPriority :
{
priority = cmd_buff [ 1 ] ;
LOG_TRACE ( Service_FS , " SetPriority %u " , priority ) ;
break ;
}
case FileCommand : : GetPriority :
{
cmd_buff [ 2 ] = priority ;
LOG_TRACE ( Service_FS , " GetPriority " ) ;
break ;
}
// Unknown command...
default :
LOG_ERROR ( Service_FS , " Unknown command=0x%08X! " , cmd ) ;
@ -435,6 +461,11 @@ void ArchiveInit() {
else
LOG_ERROR ( Service_FS , " Can't instantiate SharedExtSaveData archive with path %s " ,
sharedextsavedata_directory . c_str ( ) ) ;
// Create the SaveDataCheck archive, basically a small variation of the RomFS archive
std : : string savedatacheck_directory = FileUtil : : GetUserPath ( D_SAVEDATA_IDX ) + " ../savedatacheck/ " ;
auto savedatacheck_archive = Common : : make_unique < FileSys : : Archive_RomFS > ( savedatacheck_directory ) ;
CreateArchive ( std : : move ( savedatacheck_archive ) , ArchiveIdCode : : SaveDataCheck ) ;
}
/// Shutdown archives