aboutsummaryrefslogtreecommitdiff
path: root/source/Irrlicht/CReadFile.cpp
diff options
context:
space:
mode:
authorcutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>2020-01-03 19:05:16 +0000
committercutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>2020-01-03 19:05:16 +0000
commit2ae2a551a6290f46734307bbfdafea4b1a2cf2ba (patch)
treeba2f0b468640e44899fed3df2d4cc58795f4a003 /source/Irrlicht/CReadFile.cpp
downloadirrlicht-2ae2a551a6290f46734307bbfdafea4b1a2cf2ba.tar.xz
Merging r5975 through r6036 from trunk to ogl-es branch.
GLES drivers adapted, but only did make compile-tests. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
Diffstat (limited to 'source/Irrlicht/CReadFile.cpp')
-rw-r--r--source/Irrlicht/CReadFile.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/source/Irrlicht/CReadFile.cpp b/source/Irrlicht/CReadFile.cpp
new file mode 100644
index 0000000..cf90f54
--- /dev/null
+++ b/source/Irrlicht/CReadFile.cpp
@@ -0,0 +1,113 @@
+// Copyright (C) 2002-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+#include "CReadFile.h"
+
+namespace irr
+{
+namespace io
+{
+
+
+CReadFile::CReadFile(const io::path& fileName)
+: File(0), FileSize(0), Filename(fileName)
+{
+ #ifdef _DEBUG
+ setDebugName("CReadFile");
+ #endif
+
+ openFile();
+}
+
+
+CReadFile::~CReadFile()
+{
+ if (File)
+ fclose(File);
+}
+
+
+//! returns how much was read
+size_t CReadFile::read(void* buffer, size_t sizeToRead)
+{
+ if (!isOpen())
+ return 0;
+
+ return fread(buffer, 1, sizeToRead, File);
+}
+
+
+//! changes position in file, returns true if successful
+//! if relativeMovement==true, the pos is changed relative to current pos,
+//! otherwise from begin of file
+bool CReadFile::seek(long finalPos, bool relativeMovement)
+{
+ if (!isOpen())
+ return false;
+
+ return fseek(File, finalPos, relativeMovement ? SEEK_CUR : SEEK_SET) == 0;
+}
+
+
+//! returns size of file
+long CReadFile::getSize() const
+{
+ return FileSize;
+}
+
+
+//! returns where in the file we are.
+long CReadFile::getPos() const
+{
+ return ftell(File);
+}
+
+
+//! opens the file
+void CReadFile::openFile()
+{
+ if (Filename.size() == 0) // bugfix posted by rt
+ {
+ File = 0;
+ return;
+ }
+
+#if defined ( _IRR_WCHAR_FILESYSTEM )
+ File = _wfopen(Filename.c_str(), L"rb");
+#else
+ File = fopen(Filename.c_str(), "rb");
+#endif
+
+ if (File)
+ {
+ // get FileSize
+
+ fseek(File, 0, SEEK_END);
+ FileSize = getPos();
+ fseek(File, 0, SEEK_SET);
+ }
+}
+
+
+//! returns name of file
+const io::path& CReadFile::getFileName() const
+{
+ return Filename;
+}
+
+
+IReadFile* CReadFile::createReadFile(const io::path& fileName)
+{
+ CReadFile* file = new CReadFile(fileName);
+ if (file->isOpen())
+ return file;
+
+ file->drop();
+ return 0;
+}
+
+
+} // end namespace io
+} // end namespace irr
+