Fix bug with deleting StfsContentPackage & ensure instance gets deleted
This commit is contained in:
parent
9ecdf5eba8
commit
251b35ff14
|
@ -276,7 +276,17 @@ X_RESULT ContentManager::DeleteContent(const XCONTENT_DATA& data) {
|
|||
return X_ERROR_FILE_NOT_FOUND;
|
||||
}
|
||||
|
||||
return package->Delete();
|
||||
auto result = package->Delete();
|
||||
if (XSUCCEEDED(result)) {
|
||||
auto it = std::find(open_packages_.begin(), open_packages_.end(), package);
|
||||
if (it != open_packages_.end()) {
|
||||
open_packages_.erase(it);
|
||||
}
|
||||
|
||||
delete package;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::filesystem::path ContentManager::ResolveGameUserContentPath() {
|
||||
|
|
|
@ -165,7 +165,7 @@ bool StfsContentPackage::Mount(std::string root_name) {
|
|||
return false;
|
||||
}
|
||||
|
||||
device_ = device.release();
|
||||
header_ = device->header();
|
||||
device_inited_ = true;
|
||||
}
|
||||
|
||||
|
@ -173,12 +173,11 @@ bool StfsContentPackage::Mount(std::string root_name) {
|
|||
}
|
||||
|
||||
X_RESULT StfsContentPackage::GetThumbnail(std::vector<uint8_t>* buffer) {
|
||||
if (!device_ || !device_inited_) {
|
||||
if (!device_inited_) {
|
||||
return X_ERROR_DEVICE_NOT_CONNECTED;
|
||||
}
|
||||
auto& header = device_->header();
|
||||
buffer->resize(header.thumbnail_image_size);
|
||||
memcpy(buffer->data(), header.thumbnail_image, header.thumbnail_image_size);
|
||||
buffer->resize(header_.thumbnail_image_size);
|
||||
memcpy(buffer->data(), header_.thumbnail_image, header_.thumbnail_image_size);
|
||||
return X_ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -190,9 +189,9 @@ X_RESULT StfsContentPackage::Delete() {
|
|||
// Make sure package isn't in use
|
||||
Unmount();
|
||||
|
||||
if (std::filesystem::exists(package_path_)) {
|
||||
std::filesystem::remove(package_path_);
|
||||
return X_ERROR_SUCCESS;
|
||||
if (std::filesystem::exists(package_path_)) {
|
||||
return std::filesystem::remove(package_path_) ? X_ERROR_SUCCESS
|
||||
: X_ERROR_FUNCTION_FAILED;
|
||||
}
|
||||
return X_ERROR_FILE_NOT_FOUND;
|
||||
}
|
||||
|
|
|
@ -17,21 +17,9 @@
|
|||
|
||||
#include "xenia/base/memory.h"
|
||||
#include "xenia/base/mutex.h"
|
||||
#include "xenia/vfs/devices/stfs_container_device.h"
|
||||
#include "xenia/xbox.h"
|
||||
|
||||
namespace xe {
|
||||
namespace vfs {
|
||||
class Device;
|
||||
class StfsContainerDevice;
|
||||
} // namespace vfs
|
||||
} // namespace xe
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
class KernelState;
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
@ -82,7 +70,7 @@ class StfsContentPackage : public ContentPackage {
|
|||
X_RESULT Delete();
|
||||
|
||||
private:
|
||||
vfs::StfsContainerDevice* device_ = nullptr;
|
||||
vfs::StfsHeader header_;
|
||||
};
|
||||
|
||||
class FolderContentPackage : public ContentPackage {
|
||||
|
|
Loading…
Reference in New Issue