aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/file_sys/archive_romfs.cpp
blob: d0ca7d380358d9e44c958c1b87c2701ae6a75c3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.

#include "common/common_types.h"

#include "core/file_sys/archive_romfs.h"
#include "core/file_sys/directory_romfs.h"
#include "core/file_sys/file_romfs.h"

////////////////////////////////////////////////////////////////////////////////////////////////////
// FileSys namespace

namespace FileSys {

Archive_RomFS::Archive_RomFS(const Loader::AppLoader& app_loader) {
    // Load the RomFS from the app
    if (Loader::ResultStatus::Success != app_loader.ReadRomFS(raw_data)) {
        WARN_LOG(FILESYS, "Unable to read RomFS!");
    }
}

Archive_RomFS::~Archive_RomFS() {
}

/**
 * Open a file specified by its path, using the specified mode
 * @param path Path relative to the archive
 * @param mode Mode to open the file with
 * @return Opened file, or nullptr
 */
std::unique_ptr<File> Archive_RomFS::OpenFile(const Path& path, const Mode mode) const {
    return std::unique_ptr<File>(new File_RomFS);
}

/**
 * Delete a file specified by its path
 * @param path Path relative to the archive
 * @return Whether the file could be deleted
 */
bool Archive_RomFS::DeleteFile(const FileSys::Path& path) const {
    ERROR_LOG(FILESYS, "Attempted to delete a file from ROMFS.");
    return false;
}

/**
 * Rename a File specified by its path
 * @param src_path Source path relative to the archive
 * @param dest_path Destination path relative to the archive
 * @return Whether rename succeeded
 */
bool Archive_RomFS::RenameFile(const FileSys::Path& src_path, const FileSys::Path& dest_path) const {
    ERROR_LOG(FILESYS, "Attempted to rename a file within ROMFS.");
    return false;
}

/**
 * Delete a directory specified by its path
 * @param path Path relative to the archive
 * @return Whether the directory could be deleted
 */
bool Archive_RomFS::DeleteDirectory(const FileSys::Path& path) const {
    ERROR_LOG(FILESYS, "Attempted to delete a directory from ROMFS.");
    return false;
}

/**
 * Create a directory specified by its path
 * @param path Path relative to the archive
 * @return Whether the directory could be created
 */
bool Archive_RomFS::CreateDirectory(const Path& path) const {
    ERROR_LOG(FILESYS, "Attempted to create a directory in ROMFS.");
    return false;
}

/**
 * Rename a Directory specified by its path
 * @param src_path Source path relative to the archive
 * @param dest_path Destination path relative to the archive
 * @return Whether rename succeeded
 */
bool Archive_RomFS::RenameDirectory(const FileSys::Path& src_path, const FileSys::Path& dest_path) const {
    ERROR_LOG(FILESYS, "Attempted to rename a file within ROMFS.");
    return false;
}

/**
 * Open a directory specified by its path
 * @param path Path relative to the archive
 * @return Opened directory, or nullptr
 */
std::unique_ptr<Directory> Archive_RomFS::OpenDirectory(const Path& path) const {
    return std::unique_ptr<Directory>(new Directory_RomFS);
}

/**
 * Read data from the archive
 * @param offset Offset in bytes to start reading data from
 * @param length Length in bytes of data to read from archive
 * @param buffer Buffer to read data into
 * @return Number of bytes read
 */
size_t Archive_RomFS::Read(const u64 offset, const u32 length, u8* buffer) const {
    DEBUG_LOG(FILESYS, "called offset=%llu, length=%d", offset, length);
    memcpy(buffer, &raw_data[(u32)offset], length);
    return length;
}

/**
 * Write data to the archive
 * @param offset Offset in bytes to start writing data to
 * @param length Length in bytes of data to write to archive
 * @param buffer Buffer to write data from
 * @param flush  The flush parameters (0 == do not flush)
 * @return Number of bytes written
 */
size_t Archive_RomFS::Write(const u64 offset, const u32 length, const u32 flush, u8* buffer) {
    ERROR_LOG(FILESYS, "Attempted to write to ROMFS.");
    return 0;
}

/**
 * Get the size of the archive in bytes
 * @return Size of the archive in bytes
 */
size_t Archive_RomFS::GetSize() const {
    return sizeof(u8) * raw_data.size();
}

/**
 * Set the size of the archive in bytes
 */
void Archive_RomFS::SetSize(const u64 size) {
    ERROR_LOG(FILESYS, "Attempted to set the size of ROMFS");
}

} // namespace FileSys