Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Suyu
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
many-archive
Suyu
Commits
2f71a323
There was an error fetching the commit references. Please try again later.
Commit
2f71a323
authored
7 years ago
by
bunnei
Browse files
Options
Downloads
Patches
Plain Diff
file_sys: Repurpose 3DS IVFC code for Switch ROMFS.
parent
4c07dde4
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/core/CMakeLists.txt
+2
-2
2 additions, 2 deletions
src/core/CMakeLists.txt
src/core/file_sys/romfs_archive.cpp
+32
-37
32 additions, 37 deletions
src/core/file_sys/romfs_archive.cpp
src/core/file_sys/romfs_archive.h
+9
-12
9 additions, 12 deletions
src/core/file_sys/romfs_archive.h
with
43 additions
and
51 deletions
src/core/CMakeLists.txt
+
2
−
2
View file @
2f71a323
...
...
@@ -13,10 +13,10 @@ add_library(core STATIC
file_sys/disk_archive.h
file_sys/errors.h
file_sys/file_backend.h
file_sys/ivfc_archive.cpp
file_sys/ivfc_archive.h
file_sys/path_parser.cpp
file_sys/path_parser.h
file_sys/romfs_archive.cpp
file_sys/romfs_archive.h
file_sys/savedata_archive.cpp
file_sys/savedata_archive.h
file_sys/title_metadata.cpp
...
...
This diff is collapsed.
Click to expand it.
src/core/file_sys/
ivfc
_archive.cpp
→
src/core/file_sys/
romfs
_archive.cpp
+
32
−
37
View file @
2f71a323
// Copyright 201
4 Citra E
mulator
Project
// Copyright 201
8 yuzu e
mulator
team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
...
...
@@ -6,84 +6,79 @@
#include
<memory>
#include
"common/common_types.h"
#include
"common/logging/log.h"
#include
"core/file_sys/ivfc_archive.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// FileSys namespace
#include
"core/file_sys/romfs_archive.h"
namespace
FileSys
{
std
::
string
IVFC
Archive
::
GetName
()
const
{
return
"
IVFC
"
;
std
::
string
ROMFS
Archive
::
GetName
()
const
{
return
"
RomFS
"
;
}
ResultVal
<
std
::
unique_ptr
<
FileBackend
>>
IVFC
Archive
::
OpenFile
(
const
Path
&
path
,
const
Mode
&
mode
)
const
{
ResultVal
<
std
::
unique_ptr
<
FileBackend
>>
ROMFS
Archive
::
OpenFile
(
const
Path
&
path
,
const
Mode
&
mode
)
const
{
return
MakeResult
<
std
::
unique_ptr
<
FileBackend
>>
(
std
::
make_unique
<
IVFC
File
>
(
romfs_file
,
data_offset
,
data_size
));
std
::
make_unique
<
ROMFS
File
>
(
romfs_file
,
data_offset
,
data_size
));
}
ResultCode
IVFC
Archive
::
DeleteFile
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a file from an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
DeleteFile
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a file from an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(bunnei): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
RenameFile
(
const
Path
&
src_path
,
const
Path
&
dest_path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to rename a file within an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
RenameFile
(
const
Path
&
src_path
,
const
Path
&
dest_path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to rename a file within an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(wwylele): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
DeleteDirectory
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a directory from an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
DeleteDirectory
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a directory from an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(wwylele): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
DeleteDirectoryRecursively
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a directory from an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
DeleteDirectoryRecursively
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to delete a directory from an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(wwylele): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
CreateFile
(
const
Path
&
path
,
u64
size
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to create a file in an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
CreateFile
(
const
Path
&
path
,
u64
size
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to create a file in an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(bunnei): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
CreateDirectory
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to create a directory in an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
CreateDirectory
(
const
Path
&
path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to create a directory in an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(wwylele): Use correct error code
return
ResultCode
(
-
1
);
}
ResultCode
IVFC
Archive
::
RenameDirectory
(
const
Path
&
src_path
,
const
Path
&
dest_path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to rename a file within an
IVFC
archive (%s)."
,
ResultCode
ROMFS
Archive
::
RenameDirectory
(
const
Path
&
src_path
,
const
Path
&
dest_path
)
const
{
LOG_CRITICAL
(
Service_FS
,
"Attempted to rename a file within an
ROMFS
archive (%s)."
,
GetName
().
c_str
());
// TODO(wwylele): Use correct error code
return
ResultCode
(
-
1
);
}
ResultVal
<
std
::
unique_ptr
<
DirectoryBackend
>>
IVFC
Archive
::
OpenDirectory
(
const
Path
&
path
)
const
{
return
MakeResult
<
std
::
unique_ptr
<
DirectoryBackend
>>
(
std
::
make_unique
<
IVFC
Directory
>
());
ResultVal
<
std
::
unique_ptr
<
DirectoryBackend
>>
ROMFS
Archive
::
OpenDirectory
(
const
Path
&
path
)
const
{
return
MakeResult
<
std
::
unique_ptr
<
DirectoryBackend
>>
(
std
::
make_unique
<
ROMFS
Directory
>
());
}
u64
IVFC
Archive
::
GetFreeBytes
()
const
{
LOG_WARNING
(
Service_FS
,
"Attempted to get the free space in an
IVFC
archive"
);
u64
ROMFS
Archive
::
GetFreeBytes
()
const
{
LOG_WARNING
(
Service_FS
,
"Attempted to get the free space in an
ROMFS
archive"
);
return
0
;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ResultVal
<
size_t
>
IVFCFile
::
Read
(
const
u64
offset
,
const
size_t
length
,
u8
*
buffer
)
const
{
ResultVal
<
size_t
>
ROMFSFile
::
Read
(
const
u64
offset
,
const
size_t
length
,
u8
*
buffer
)
const
{
LOG_TRACE
(
Service_FS
,
"called offset=%llu, length=%zu"
,
offset
,
length
);
romfs_file
->
Seek
(
data_offset
+
offset
,
SEEK_SET
);
size_t
read_length
=
(
size_t
)
std
::
min
((
u64
)
length
,
data_size
-
offset
);
...
...
@@ -91,19 +86,19 @@ ResultVal<size_t> IVFCFile::Read(const u64 offset, const size_t length, u8* buff
return
MakeResult
<
size_t
>
(
romfs_file
->
ReadBytes
(
buffer
,
read_length
));
}
ResultVal
<
size_t
>
IVFC
File
::
Write
(
const
u64
offset
,
const
size_t
length
,
const
bool
flush
,
const
u8
*
buffer
)
const
{
LOG_ERROR
(
Service_FS
,
"Attempted to write to
IVFC
file"
);
ResultVal
<
size_t
>
ROMFS
File
::
Write
(
const
u64
offset
,
const
size_t
length
,
const
bool
flush
,
const
u8
*
buffer
)
const
{
LOG_ERROR
(
Service_FS
,
"Attempted to write to
ROMFS
file"
);
// TODO(Subv): Find error code
return
MakeResult
<
size_t
>
(
0
);
}
u64
IVFC
File
::
GetSize
()
const
{
u64
ROMFS
File
::
GetSize
()
const
{
return
data_size
;
}
bool
IVFC
File
::
SetSize
(
const
u64
size
)
const
{
LOG_ERROR
(
Service_FS
,
"Attempted to set the size of an
IVFC
file"
);
bool
ROMFS
File
::
SetSize
(
const
u64
size
)
const
{
LOG_ERROR
(
Service_FS
,
"Attempted to set the size of an
ROMFS
file"
);
return
false
;
}
...
...
This diff is collapsed.
Click to expand it.
src/core/file_sys/
ivfc
_archive.h
→
src/core/file_sys/
romfs
_archive.h
+
9
−
12
View file @
2f71a323
// Copyright 201
4 Citra E
mulator
Project
// Copyright 201
8 yuzu e
mulator
team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
...
...
@@ -15,19 +15,16 @@
#include
"core/file_sys/file_backend.h"
#include
"core/hle/result.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// FileSys namespace
namespace
FileSys
{
/**
* Helper which implements an interface to deal with
IVFC
images used in some
archives
* This should be subclassed by concrete archive types, which will provide the
*
input data
(load the raw
IVFC
archive) and override any required methods
* Helper which implements an interface to deal with
Switch .istorage ROMFS
images used in some
*
archives
This should be subclassed by concrete archive types, which will provide the
input data
* (load the raw
ROMFS
archive) and override any required methods
*/
class
IVFC
Archive
:
public
ArchiveBackend
{
class
ROMFS
Archive
:
public
ArchiveBackend
{
public:
IVFC
Archive
(
std
::
shared_ptr
<
FileUtil
::
IOFile
>
file
,
u64
offset
,
u64
size
)
ROMFS
Archive
(
std
::
shared_ptr
<
FileUtil
::
IOFile
>
file
,
u64
offset
,
u64
size
)
:
romfs_file
(
file
),
data_offset
(
offset
),
data_size
(
size
)
{}
std
::
string
GetName
()
const
override
;
...
...
@@ -50,9 +47,9 @@ protected:
u64
data_size
;
};
class
IVFC
File
:
public
FileBackend
{
class
ROMFS
File
:
public
FileBackend
{
public:
IVFC
File
(
std
::
shared_ptr
<
FileUtil
::
IOFile
>
file
,
u64
offset
,
u64
size
)
ROMFS
File
(
std
::
shared_ptr
<
FileUtil
::
IOFile
>
file
,
u64
offset
,
u64
size
)
:
romfs_file
(
file
),
data_offset
(
offset
),
data_size
(
size
)
{}
ResultVal
<
size_t
>
Read
(
u64
offset
,
size_t
length
,
u8
*
buffer
)
const
override
;
...
...
@@ -70,7 +67,7 @@ private:
u64
data_size
;
};
class
IVFC
Directory
:
public
DirectoryBackend
{
class
ROMFS
Directory
:
public
DirectoryBackend
{
public:
u32
Read
(
const
u32
count
,
Entry
*
entries
)
override
{
return
0
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment