nuclear@3: /************************************************************************** nuclear@3: nuclear@3: Filename : OVR_SysFile.cpp nuclear@3: Content : File wrapper class implementation (Win32) nuclear@3: nuclear@3: Created : April 5, 1999 nuclear@3: Authors : Michael Antonov nuclear@3: nuclear@3: Copyright : Copyright 2011 Oculus VR, Inc. All Rights reserved. nuclear@3: nuclear@3: Use of this software is subject to the terms of the Oculus license nuclear@3: agreement provided at the time of installation or download, or which nuclear@3: otherwise accompanies this software in either electronic or hard copy form. nuclear@3: nuclear@3: **************************************************************************/ nuclear@3: nuclear@3: #define GFILE_CXX nuclear@3: nuclear@3: // Standard C library (Captain Obvious guarantees!) nuclear@3: #include nuclear@3: nuclear@3: #include "OVR_SysFile.h" nuclear@3: nuclear@3: namespace OVR { nuclear@3: nuclear@3: // This is - a dummy file that fails on all calls. nuclear@3: nuclear@3: class UnopenedFile : public File nuclear@3: { nuclear@3: public: nuclear@3: UnopenedFile() { } nuclear@3: ~UnopenedFile() { } nuclear@3: nuclear@3: virtual const char* GetFilePath() { return 0; } nuclear@3: nuclear@3: // ** File Information nuclear@3: virtual bool IsValid() { return 0; } nuclear@3: virtual bool IsWritable() { return 0; } nuclear@3: nuclear@3: // Return position / file size nuclear@3: virtual int Tell() { return 0; } nuclear@3: virtual SInt64 LTell() { return 0; } nuclear@3: virtual int GetLength() { return 0; } nuclear@3: virtual SInt64 LGetLength() { return 0; } nuclear@3: nuclear@3: // virtual bool Stat(FileStats *pfs) { return 0; } nuclear@3: virtual int GetErrorCode() { return Error_FileNotFound; } nuclear@3: nuclear@3: // ** Stream implementation & I/O nuclear@3: virtual int Write(const UByte *pbuffer, int numBytes) { return -1; OVR_UNUSED2(pbuffer, numBytes); } nuclear@3: virtual int Read(UByte *pbuffer, int numBytes) { return -1; OVR_UNUSED2(pbuffer, numBytes); } nuclear@3: virtual int SkipBytes(int numBytes) { return 0; OVR_UNUSED(numBytes); } nuclear@3: virtual int BytesAvailable() { return 0; } nuclear@3: virtual bool Flush() { return 0; } nuclear@3: virtual int Seek(int offset, int origin) { return -1; OVR_UNUSED2(offset, origin); } nuclear@3: virtual SInt64 LSeek(SInt64 offset, int origin) { return -1; OVR_UNUSED2(offset, origin); } nuclear@3: nuclear@3: virtual int CopyFromStream(File *pstream, int byteSize) { return -1; OVR_UNUSED2(pstream, byteSize); } nuclear@3: virtual bool Close() { return 0; } nuclear@3: }; nuclear@3: nuclear@3: nuclear@3: nuclear@3: // ***** System File nuclear@3: nuclear@3: // System file is created to access objects on file system directly nuclear@3: // This file can refer directly to path nuclear@3: nuclear@3: // ** Constructor nuclear@3: SysFile::SysFile() : DelegatedFile(0) nuclear@3: { nuclear@3: pFile = *new UnopenedFile; nuclear@3: } nuclear@3: nuclear@3: File* FileFILEOpen(const String& path, int flags, int mode); nuclear@3: nuclear@3: // Opens a file nuclear@3: SysFile::SysFile(const String& path, int flags, int mode) : DelegatedFile(0) nuclear@3: { nuclear@3: Open(path, flags, mode); nuclear@3: } nuclear@3: nuclear@3: nuclear@3: // ** Open & management nuclear@3: // Will fail if file's already open nuclear@3: bool SysFile::Open(const String& path, int flags, int mode) nuclear@3: { nuclear@3: pFile = *FileFILEOpen(path, flags, mode); nuclear@3: if ((!pFile) || (!pFile->IsValid())) nuclear@3: { nuclear@3: pFile = *new UnopenedFile; nuclear@3: return 0; nuclear@3: } nuclear@3: //pFile = *OVR_NEW DelegatedFile(pFile); // MA Testing nuclear@3: if (flags & Open_Buffered) nuclear@3: pFile = *new BufferedFile(pFile); nuclear@3: return 1; nuclear@3: } nuclear@3: nuclear@3: nuclear@3: // ** Overrides nuclear@3: nuclear@3: int SysFile::GetErrorCode() nuclear@3: { nuclear@3: return pFile ? pFile->GetErrorCode() : Error_FileNotFound; nuclear@3: } nuclear@3: nuclear@3: nuclear@3: // Overrides to provide re-open support nuclear@3: bool SysFile::IsValid() nuclear@3: { nuclear@3: return pFile && pFile->IsValid(); nuclear@3: } nuclear@3: bool SysFile::Close() nuclear@3: { nuclear@3: if (IsValid()) nuclear@3: { nuclear@3: DelegatedFile::Close(); nuclear@3: pFile = *new UnopenedFile; nuclear@3: return 1; nuclear@3: } nuclear@3: return 0; nuclear@3: } nuclear@3: nuclear@3: } // OVR