summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/file_sys/file.h7
-rw-r--r--src/core/file_sys/file_romfs.cpp9
-rw-r--r--src/core/file_sys/file_romfs.h7
-rw-r--r--src/core/file_sys/file_sdmc.cpp11
-rw-r--r--src/core/file_sys/file_sdmc.h7
-rw-r--r--src/core/hle/kernel/archive.cpp8
6 files changed, 49 insertions, 0 deletions
diff --git a/src/core/file_sys/file.h b/src/core/file_sys/file.h
index 3749e4fcf..443e65319 100644
--- a/src/core/file_sys/file.h
+++ b/src/core/file_sys/file.h
@@ -44,6 +44,13 @@ public:
virtual size_t GetSize() const = 0;
/**
+ * Set the size of the file in bytes
+ * @param size New size of the file
+ * @return true if successful
+ */
+ virtual bool SetSize(const u64 size) const = 0;
+
+ /**
* Close the file
* @return true if the file closed correctly
*/
diff --git a/src/core/file_sys/file_romfs.cpp b/src/core/file_sys/file_romfs.cpp
index 0709e98f0..3ef616e08 100644
--- a/src/core/file_sys/file_romfs.cpp
+++ b/src/core/file_sys/file_romfs.cpp
@@ -49,6 +49,15 @@ size_t File_RomFS::GetSize() const {
}
/**
+ * Set the size of the file in bytes
+ * @param size New size of the file
+ * @return true if successful
+ */
+bool File_RomFS::SetSize(const u64 size) const {
+ return false;
+}
+
+/**
* Close the file
* @return true if the file closed correctly
*/
diff --git a/src/core/file_sys/file_romfs.h b/src/core/file_sys/file_romfs.h
index 28b4f1158..06973eb93 100644
--- a/src/core/file_sys/file_romfs.h
+++ b/src/core/file_sys/file_romfs.h
@@ -45,6 +45,13 @@ public:
size_t GetSize() const override;
/**
+ * Set the size of the file in bytes
+ * @param size New size of the file
+ * @return true if successful
+ */
+ bool SetSize(const u64 size) const override;
+
+ /**
* Close the file
* @return true if the file closed correctly
*/
diff --git a/src/core/file_sys/file_sdmc.cpp b/src/core/file_sys/file_sdmc.cpp
index 76e7f5d3d..3ef2b0c0e 100644
--- a/src/core/file_sys/file_sdmc.cpp
+++ b/src/core/file_sys/file_sdmc.cpp
@@ -76,6 +76,17 @@ size_t File_SDMC::GetSize() const {
}
/**
+ * Set the size of the file in bytes
+ * @param size New size of the file
+ * @return true if successful
+ */
+bool File_SDMC::SetSize(const u64 size) const {
+ file->Resize(size);
+ file->Flush();
+ return true;
+}
+
+/**
* Close the file
* @return true if the file closed correctly
*/
diff --git a/src/core/file_sys/file_sdmc.h b/src/core/file_sys/file_sdmc.h
index d23020494..6b3a1f3a5 100644
--- a/src/core/file_sys/file_sdmc.h
+++ b/src/core/file_sys/file_sdmc.h
@@ -48,6 +48,13 @@ public:
size_t GetSize() const override;
/**
+ * Set the size of the file in bytes
+ * @param size New size of the file
+ * @return true if successful
+ */
+ bool SetSize(const u64 size) const override;
+
+ /**
* Close the file
* @return true if the file closed correctly
*/
diff --git a/src/core/hle/kernel/archive.cpp b/src/core/hle/kernel/archive.cpp
index fa4972994..0a66ab29b 100644
--- a/src/core/hle/kernel/archive.cpp
+++ b/src/core/hle/kernel/archive.cpp
@@ -181,6 +181,14 @@ public:
break;
}
+ case FileCommand::SetSize:
+ {
+ u64 size = cmd_buff[1] | ((u64)cmd_buff[2] << 32);
+ DEBUG_LOG(KERNEL, "SetSize %s %s size=%d", GetTypeName().c_str(), GetName().c_str(), size);
+ backend->SetSize(size);
+ break;
+ }
+
case FileCommand::Close:
{
DEBUG_LOG(KERNEL, "Close %s %s", GetTypeName().c_str(), GetName().c_str());