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