FileSys/Kernel: Implement SetSize service call for File objects.

This commit is contained in:
Emmanuel Gil Peyrot 2014-09-27 19:16:51 +00:00
parent d34673990b
commit 23c2fbfc7a
6 changed files with 49 additions and 0 deletions

View file

@ -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

View file

@ -48,6 +48,15 @@ size_t File_RomFS::GetSize() const {
return -1;
}
/**
* 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

View file

@ -44,6 +44,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

View file

@ -75,6 +75,17 @@ size_t File_SDMC::GetSize() const {
return static_cast<size_t>(file->GetSize());
}
/**
* 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

View file

@ -47,6 +47,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

View file

@ -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());