mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-27 04:08:37 +01:00
Common: Ensure VFS references not directly deleted.
This commit is contained in:
1 parent
84b7df62ab
commit
2fce2df7f6
3 files changed
+12
-4
No files matched your search
@@ -37,7 +37,10 @@ public:
|
||||
|
||||
class DirectoryReaderOpenFile : public VFSOpenFile {
|
||||
public:
|
||||
FILE *file;
|
||||
~DirectoryReaderOpenFile() {
|
||||
_dbg_assert_(file == nullptr);
|
||||
}
|
||||
FILE *file = nullptr;
|
||||
};
|
||||
|
||||
VFSFileReference *DirectoryReader::GetFile(const char *path) {
|
||||
@@ -80,6 +83,8 @@ size_t DirectoryReader::Read(VFSOpenFile *vfsOpenFile, void *buffer, size_t leng
|
||||
|
||||
void DirectoryReader::CloseFile(VFSOpenFile *vfsOpenFile) {
|
||||
DirectoryReaderOpenFile *openFile = (DirectoryReaderOpenFile *)vfsOpenFile;
|
||||
_dbg_assert_(openFile->file != nullptr);
|
||||
fclose(openFile->file);
|
||||
openFile->file = nullptr;
|
||||
delete openFile;
|
||||
}
|
||||
@@ -42,8 +42,6 @@ public:
|
||||
|
||||
class VFSBackend : public VFSInterface {
|
||||
public:
|
||||
// use delete[] to release the returned memory.
|
||||
|
||||
virtual VFSFileReference *GetFile(const char *path) = 0;
|
||||
virtual bool GetFileInfo(VFSFileReference *vfsReference, File::FileInfo *fileInfo) = 0;
|
||||
virtual void ReleaseFile(VFSFileReference *vfsReference) = 0;
|
||||
|
||||
@@ -197,8 +197,12 @@ public:
|
||||
|
||||
class ZipFileReaderOpenFile : public VFSOpenFile {
|
||||
public:
|
||||
~ZipFileReaderOpenFile() {
|
||||
// Needs to be closed properly and unlocked.
|
||||
_dbg_assert_(zf == nullptr);
|
||||
}
|
||||
ZipFileReaderFileReference *reference;
|
||||
zip_file_t *zf;
|
||||
zip_file_t *zf = nullptr;
|
||||
};
|
||||
|
||||
static constexpr zip_uint64_t INVALID_ZIP_SIZE = 0xFFFFFFFFFFFFFFFFULL;
|
||||
@@ -270,6 +274,7 @@ void ZipFileReader::CloseFile(VFSOpenFile *vfsOpenFile) {
|
||||
ZipFileReaderOpenFile *file = (ZipFileReaderOpenFile *)vfsOpenFile;
|
||||
_dbg_assert_(file->zf != nullptr);
|
||||
zip_fclose(file->zf);
|
||||
file->zf = nullptr;
|
||||
lock_.unlock();
|
||||
delete file;
|
||||
}
|
||||
Reference in new issue
Block a user