[VFS] Change file attributes or timestamps.
Changing these options is only viable for r/w mounted host devices (Cache) Changing attributes works only on windows Changing timestamps is mocked and logged to see if there is any title that uses it
This commit is contained in:
@@ -132,5 +132,47 @@ void HostPathEntry::update() {
|
||||
}
|
||||
}
|
||||
|
||||
bool HostPathEntry::SetAttributes(uint64_t attributes) {
|
||||
if (device_->is_read_only()) {
|
||||
return false;
|
||||
}
|
||||
return xe::filesystem::SetAttributes(host_path_, attributes);
|
||||
}
|
||||
|
||||
bool HostPathEntry::SetCreateTimestamp(uint64_t timestamp) {
|
||||
if (device_->is_read_only()) {
|
||||
XELOGW(
|
||||
"{} - Tried to change read-only creation timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return false;
|
||||
}
|
||||
XELOGI("{} - Tried to change creation timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HostPathEntry::SetAccessTimestamp(uint64_t timestamp) {
|
||||
if (device_->is_read_only()) {
|
||||
XELOGW(
|
||||
"{} - Tried to change read-only access timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return false;
|
||||
}
|
||||
XELOGI("{} - Tried to change access timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HostPathEntry::SetWriteTimestamp(uint64_t timestamp) {
|
||||
if (device_->is_read_only()) {
|
||||
XELOGW("{} - Tried to change read-only write timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return false;
|
||||
}
|
||||
XELOGI("{} - Tried to change write timestamp for file: {} to: {}",
|
||||
__FUNCTION__, name_, timestamp);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace vfs
|
||||
} // namespace xe
|
||||
|
||||
@@ -40,6 +40,11 @@ class HostPathEntry : public Entry {
|
||||
size_t length) override;
|
||||
void update() override;
|
||||
|
||||
bool SetAttributes(uint64_t attributes) override;
|
||||
bool SetCreateTimestamp(uint64_t timestamp) override;
|
||||
bool SetAccessTimestamp(uint64_t timestamp) override;
|
||||
bool SetWriteTimestamp(uint64_t timestamp) override;
|
||||
|
||||
private:
|
||||
friend class HostPathDevice;
|
||||
|
||||
|
||||
@@ -94,6 +94,11 @@ class Entry {
|
||||
uint64_t access_timestamp() const { return access_timestamp_; }
|
||||
uint64_t write_timestamp() const { return write_timestamp_; }
|
||||
|
||||
virtual bool SetAttributes(uint64_t attributes) { return false; }
|
||||
virtual bool SetCreateTimestamp(uint64_t timestamp) { return false; }
|
||||
virtual bool SetAccessTimestamp(uint64_t timestamp) { return false; }
|
||||
virtual bool SetWriteTimestamp(uint64_t timestamp) { return false; }
|
||||
|
||||
bool is_read_only() const;
|
||||
|
||||
Entry* GetChild(const std::string_view name);
|
||||
|
||||
Reference in New Issue
Block a user