diff --git a/src/xenia/kernel/fs/devices/disc_image_file.cc b/src/xenia/kernel/fs/devices/disc_image_file.cc index 52cecaa5b..8f16a1276 100644 --- a/src/xenia/kernel/fs/devices/disc_image_file.cc +++ b/src/xenia/kernel/fs/devices/disc_image_file.cc @@ -28,12 +28,16 @@ DiscImageFile::DiscImageFile( DiscImageFile::~DiscImageFile() { } -const char* DiscImageFile::name(void) { - return entry_->name(); +const char* DiscImageFile::path(void) const { + return entry_->path(); } -const char* DiscImageFile::path(void) { - return entry_->path(); +const char* DiscImageFile::absolute_path(void) const { + return entry_->absolute_path(); +} + +const char* DiscImageFile::name(void) const { + return entry_->name(); } X_STATUS DiscImageFile::QueryInfo(XFileInfo* out_info) { diff --git a/src/xenia/kernel/fs/devices/disc_image_file.h b/src/xenia/kernel/fs/devices/disc_image_file.h index c3217987e..0383801e0 100644 --- a/src/xenia/kernel/fs/devices/disc_image_file.h +++ b/src/xenia/kernel/fs/devices/disc_image_file.h @@ -29,8 +29,9 @@ public: DiscImageEntry* entry); virtual ~DiscImageFile(); - virtual const char* name(void); - virtual const char* path(void); + virtual const char* path(void) const; + virtual const char* absolute_path(void) const; + virtual const char* name(void) const; virtual X_STATUS QueryInfo(XFileInfo* out_info); virtual X_STATUS QueryDirectory(XDirectoryInfo* out_info, diff --git a/src/xenia/kernel/fs/devices/host_path_file.cc b/src/xenia/kernel/fs/devices/host_path_file.cc index d09189e63..072855a9d 100644 --- a/src/xenia/kernel/fs/devices/host_path_file.cc +++ b/src/xenia/kernel/fs/devices/host_path_file.cc @@ -28,12 +28,16 @@ HostPathFile::~HostPathFile() { CloseHandle(file_handle_); } -const char* HostPathFile::name(void) { - return entry_->name(); +const char* HostPathFile::path(void) const { + return entry_->path(); } -const char* HostPathFile::path(void) { - return entry_->path(); +const char* HostPathFile::absolute_path(void) const { + return entry_->absolute_path(); +} + +const char* HostPathFile::name(void) const { + return entry_->name(); } X_STATUS HostPathFile::QueryInfo(XFileInfo* out_info) { diff --git a/src/xenia/kernel/fs/devices/host_path_file.h b/src/xenia/kernel/fs/devices/host_path_file.h index cdbd5150d..dce537f8e 100644 --- a/src/xenia/kernel/fs/devices/host_path_file.h +++ b/src/xenia/kernel/fs/devices/host_path_file.h @@ -29,8 +29,9 @@ public: HostPathEntry* entry, HANDLE file_handle); virtual ~HostPathFile(); - virtual const char* name(void); - virtual const char* path(void); + virtual const char* path(void) const; + virtual const char* absolute_path(void) const; + virtual const char* name(void) const; virtual X_STATUS QueryInfo(XFileInfo* out_info); virtual X_STATUS QueryDirectory(XDirectoryInfo* out_info, diff --git a/src/xenia/kernel/fs/devices/stfs_container_file.cc b/src/xenia/kernel/fs/devices/stfs_container_file.cc index 9fd4e16ca..b260dc001 100644 --- a/src/xenia/kernel/fs/devices/stfs_container_file.cc +++ b/src/xenia/kernel/fs/devices/stfs_container_file.cc @@ -28,12 +28,16 @@ STFSContainerFile::STFSContainerFile( STFSContainerFile::~STFSContainerFile() { } -const char* STFSContainerFile::name(void) { - return entry_->name(); +const char* STFSContainerFile::path(void) const { + return entry_->path(); } -const char* STFSContainerFile::path(void) { - return entry_->path(); +const char* STFSContainerFile::absolute_path(void) const { + return entry_->absolute_path(); +} + +const char* STFSContainerFile::name(void) const { + return entry_->name(); } X_STATUS STFSContainerFile::QueryInfo(XFileInfo* out_info) { diff --git a/src/xenia/kernel/fs/devices/stfs_container_file.h b/src/xenia/kernel/fs/devices/stfs_container_file.h index 147072891..52933e26a 100644 --- a/src/xenia/kernel/fs/devices/stfs_container_file.h +++ b/src/xenia/kernel/fs/devices/stfs_container_file.h @@ -29,8 +29,9 @@ public: STFSContainerEntry* entry); virtual ~STFSContainerFile(); - virtual const char* name(void); - virtual const char* path(void); + virtual const char* path(void) const; + virtual const char* absolute_path(void) const; + virtual const char* name(void) const; virtual X_STATUS QueryInfo(XFileInfo* out_info); virtual X_STATUS QueryDirectory(XDirectoryInfo* out_info, diff --git a/src/xenia/kernel/fs/entry.cc b/src/xenia/kernel/fs/entry.cc index 970a673ba..c7c28819b 100644 --- a/src/xenia/kernel/fs/entry.cc +++ b/src/xenia/kernel/fs/entry.cc @@ -8,7 +8,7 @@ */ #include - +#include using namespace xe; using namespace xe::kernel; @@ -26,12 +26,16 @@ MemoryMapping::~MemoryMapping() { Entry::Entry(Type type, Device* device, const char* path) : type_(type), device_(device) { + XEASSERTNOTNULL(device); path_ = xestrdupa(path); + // TODO(benvanik): *shudder* + absolute_path_ = xestrdupa((std::string(device->path()) + std::string(path)).c_str()); // TODO(benvanik): last index of \, unless \ at end, then before that name_ = NULL; } Entry::~Entry() { - xe_free(path_); xe_free(name_); + xe_free(path_); + xe_free(absolute_path_); } diff --git a/src/xenia/kernel/fs/entry.h b/src/xenia/kernel/fs/entry.h index cc1b0b1af..0e33d94e4 100644 --- a/src/xenia/kernel/fs/entry.h +++ b/src/xenia/kernel/fs/entry.h @@ -56,6 +56,7 @@ public: Type type() const { return type_; } Device* device() const { return device_; } const char* path() const { return path_; } + const char* absolute_path() const { return absolute_path_; } const char* name() const { return name_; } virtual X_STATUS QueryInfo(XFileInfo* out_info) = 0; @@ -76,6 +77,7 @@ private: Type type_; Device* device_; char* path_; + char* absolute_path_; char* name_; }; diff --git a/src/xenia/kernel/objects/xfile.h b/src/xenia/kernel/objects/xfile.h index 20941a04e..635342e3d 100644 --- a/src/xenia/kernel/objects/xfile.h +++ b/src/xenia/kernel/objects/xfile.h @@ -87,8 +87,9 @@ class XFile : public XObject { public: virtual ~XFile(); - virtual const char* name(void) = 0; - virtual const char* path(void) = 0; + virtual const char* path(void) const = 0; + virtual const char* absolute_path(void) const = 0; + virtual const char* name(void) const = 0; size_t position() const { return position_; } void set_position(size_t value) { position_ = value; }