@@ -43,6 +43,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
@@ -48,6 +48,15 @@ size_t File_RomFS::GetSize() const {
return -1;
}
+/**
+bool File_RomFS::SetSize(const u64 size) const {
+ return false;
+}
@@ -44,6 +44,13 @@ public:
size_t GetSize() const override;
+ bool SetSize(const u64 size) const override;
@@ -75,6 +75,17 @@ size_t File_SDMC::GetSize() const {
return static_cast<size_t>(file->GetSize());
+bool File_SDMC::SetSize(const u64 size) const {
+ file->Resize(size);
+ file->Flush();
+ return true;
@@ -47,6 +47,13 @@ public:
@@ -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());