aboutsummaryrefslogtreecommitdiff
path: root/source/Irrlicht/CWriteFile.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/CWriteFile.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/CWriteFile.cpp')
-rw-r--r--source/Irrlicht/CWriteFile.cpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/source/Irrlicht/CWriteFile.cpp b/source/Irrlicht/CWriteFile.cpp
new file mode 100644
index 0000000..ef816b6
--- /dev/null
+++ b/source/Irrlicht/CWriteFile.cpp
@@ -0,0 +1,130 @@
+// 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 "CWriteFile.h"
+#include <stdio.h>
+
+namespace irr
+{
+namespace io
+{
+
+
+CWriteFile::CWriteFile(const io::path& fileName, bool append)
+: FileSize(0)
+{
+ #ifdef _DEBUG
+ setDebugName("CWriteFile");
+ #endif
+
+ Filename = fileName;
+ openFile(append);
+}
+
+
+
+CWriteFile::~CWriteFile()
+{
+ if (File)
+ fclose(File);
+}
+
+
+
+//! returns if file is open
+inline bool CWriteFile::isOpen() const
+{
+ return File != 0;
+}
+
+
+
+//! returns how much was read
+size_t CWriteFile::write(const void* buffer, size_t sizeToWrite)
+{
+ if (!isOpen())
+ return 0;
+
+ return fwrite(buffer, 1, sizeToWrite, 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 CWriteFile::seek(long finalPos, bool relativeMovement)
+{
+ if (!isOpen())
+ return false;
+
+ return fseek(File, finalPos, relativeMovement ? SEEK_CUR : SEEK_SET) == 0;
+}
+
+
+
+//! returns where in the file we are.
+long CWriteFile::getPos() const
+{
+ return ftell(File);
+}
+
+
+
+//! opens the file
+void CWriteFile::openFile(bool append)
+{
+ if (Filename.size() == 0)
+ {
+ File = 0;
+ return;
+ }
+
+#if defined(_IRR_WCHAR_FILESYSTEM)
+ File = _wfopen(Filename.c_str(), append ? L"ab" : L"wb");
+#else
+ File = fopen(Filename.c_str(), append ? "ab" : "wb");
+#endif
+
+ if (File)
+ {
+ // get FileSize
+
+ fseek(File, 0, SEEK_END);
+ FileSize = ftell(File);
+ fseek(File, 0, SEEK_SET);
+ }
+}
+
+
+
+//! returns name of file
+const io::path& CWriteFile::getFileName() const
+{
+ return Filename;
+}
+
+//! Flush the content of the buffer in the file
+bool CWriteFile::flush()
+{
+ if (!isOpen())
+ return false;
+
+ return fflush(File) == 0; // 0 indicates success, otherwise EOF and errno is set
+}
+
+IWriteFile* CWriteFile::createWriteFile(const io::path& fileName, bool append)
+{
+ CWriteFile* file = new CWriteFile(fileName, append);
+ if (file->isOpen())
+ return file;
+
+ file->drop();
+ return 0;
+}
+
+
+} // end namespace io
+} // end namespace irr
+