summaryrefslogtreecommitdiff
path: root/src/utils/virtfs.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-02-11 17:13:02 +0300
committerAndrei Karas <akaras@inbox.ru>2017-02-11 17:44:15 +0300
commitf978c1bed85961e102951340669ca873328bcef3 (patch)
treee7f67d2806f72cccc028be95f3c3e00679368d20 /src/utils/virtfs.cpp
parent083160ca5bdc366e4849c1f73e718531250a9e7c (diff)
downloadmanaplus-f978c1bed85961e102951340669ca873328bcef3.tar.gz
manaplus-f978c1bed85961e102951340669ca873328bcef3.tar.bz2
manaplus-f978c1bed85961e102951340669ca873328bcef3.tar.xz
manaplus-f978c1bed85961e102951340669ca873328bcef3.zip
Add VirtFile struct and replace all Phyfs_file usage to this struct.
Diffstat (limited to 'src/utils/virtfs.cpp')
-rw-r--r--src/utils/virtfs.cpp78
1 files changed, 57 insertions, 21 deletions
diff --git a/src/utils/virtfs.cpp b/src/utils/virtfs.cpp
index af000376a..6d3d18ba9 100644
--- a/src/utils/virtfs.cpp
+++ b/src/utils/virtfs.cpp
@@ -22,6 +22,9 @@
#include "logger.h"
+#include "utils/virtfile.h"
+#include "utils/virtfileprivate.h"
+
#include <iostream>
#include <unistd.h>
@@ -98,19 +101,34 @@ namespace VirtFs
PHYSFS_freeList(listVar);
}
- PHYSFS_file *openRead(const char *const filename)
+ VirtFile *openRead(const char *const filename)
{
- return PHYSFS_openRead(filename);
+ PHYSFS_file *const handle = PHYSFS_openRead(filename);
+ if (!handle)
+ return nullptr;
+ VirtFile *const file = new VirtFile;
+ file->mPrivate = new VirtFilePrivate(handle);
+ return file;
}
- PHYSFS_file *openWrite(const char *const filename)
+ VirtFile *openWrite(const char *const filename)
{
- return PHYSFS_openWrite(filename);
+ PHYSFS_file *const handle = PHYSFS_openWrite(filename);
+ if (!handle)
+ return nullptr;
+ VirtFile *const file = new VirtFile;
+ file->mPrivate = new VirtFilePrivate(handle);
+ return file;
}
- PHYSFS_file *openAppend(const char *const filename)
+ VirtFile *openAppend(const char *const filename)
{
- return PHYSFS_openAppend(filename);
+ PHYSFS_file *const handle = PHYSFS_openAppend(filename);
+ if (!handle)
+ return nullptr;
+ VirtFile *const file = new VirtFile;
+ file->mPrivate = new VirtFilePrivate(handle);
+ return file;
}
bool setWriteDir(const char *const newDir)
@@ -141,7 +159,7 @@ namespace VirtFs
void *loadFile(const std::string &fileName, int &fileSize)
{
// Attempt to open the specified file using PhysicsFS
- PHYSFS_file *const file = VirtFs::openRead(fileName.c_str());
+ VirtFile *const file = VirtFs::openRead(fileName.c_str());
if (!file)
{
@@ -185,45 +203,63 @@ namespace VirtFs
return PHYSFS_getLastError();
}
- int close(PHYSFS_file *const file)
+ int close(VirtFile *const file)
{
- return PHYSFS_close(file);
+ if (file == nullptr)
+ return 0;
+ delete file;
+ return 1;
}
- int64_t read(PHYSFS_File *const file,
+ int64_t read(VirtFile *const file,
void *const buffer,
const uint32_t objSize,
const uint32_t objCount)
{
- return PHYSFS_read(file, buffer, objSize, objCount);
+ if (file == nullptr)
+ return 0;
+ return PHYSFS_read(file->mPrivate->mFile,
+ buffer,
+ objSize,
+ objCount);
}
- int64_t write(PHYSFS_File *const file,
+ int64_t write(VirtFile *const file,
const void *const buffer,
const uint32_t objSize,
const uint32_t objCount)
{
- return PHYSFS_write(file, buffer, objSize, objCount);
+ if (file == nullptr)
+ return 0;
+ return PHYSFS_write(file->mPrivate->mFile,
+ buffer,
+ objSize,
+ objCount);
}
- int64_t fileLength(PHYSFS_File *const file)
+ int64_t fileLength(VirtFile *const file)
{
- return PHYSFS_fileLength(file);
+ if (file == nullptr)
+ return -1;
+ return PHYSFS_fileLength(file->mPrivate->mFile);
}
- int64_t tell(PHYSFS_File *const file)
+ int64_t tell(VirtFile *const file)
{
- return PHYSFS_tell(file);
+ if (file == nullptr)
+ return -1;
+ return PHYSFS_tell(file->mPrivate->mFile);
}
- int seek(PHYSFS_File *const file,
+ int seek(VirtFile *const file,
const uint64_t pos)
{
- return PHYSFS_seek(file, pos);
+ return PHYSFS_seek(file->mPrivate->mFile,
+ pos);
}
- int eof(PHYSFS_File *const file)
+ int eof(VirtFile *const file)
{
- return PHYSFS_eof(file);
+ return PHYSFS_eof(file->mPrivate->mFile);
}
} // namespace PhysFs