bluecore/corona/src/DefaultFileSystem.cpp

56 lines
1.3 KiB
C++

//#include <stdio.h>
#include <physfs.h>
#include "Utility.h"
namespace corona {
class CFile : public DLLImplementation<File> {
public:
CFile(PHYSFS_File* file) {
m_file = file;
}
~CFile() {
PHYSFS_close(m_file);
}
int COR_CALL read(void* buffer, int size) {
return (int)PHYSFS_read(m_file, buffer, 1, size );
}
int COR_CALL write(const void* buffer, int size) {
return (int)PHYSFS_write(m_file, buffer, 1, size );
}
bool COR_CALL seek(int position, SeekMode mode) {
PHYSFS_uint64 pos;
switch (mode) {
case BEGIN: pos = position; break;
case CURRENT: pos = PHYSFS_tell(m_file) + position; break;
case END: pos = PHYSFS_fileLength( m_file ) + position; break;
default: return false;
}
return PHYSFS_seek(m_file, pos) != 0;
}
int COR_CALL tell() {
return (int)PHYSFS_tell(m_file);
}
private:
PHYSFS_File* m_file;
};
COR_EXPORT(File*) CorOpenFile(const char* filename, bool writeable) {
PHYSFS_File* file;
if( writeable )
file = PHYSFS_openWrite(filename);
else
file = PHYSFS_openRead(filename);
return (file ? new CFile(file) : 0);
}
}