summaryrefslogtreecommitdiffhomepage
path: root/ovr_sdk_win_23.0.0/LibOVRKernel/Src/Kernel/OVR_SysFile.cpp
blob: 3fc8913d4975c7b0f7174ae5fdc3bf67d1d7d049 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**************************************************************************

Filename    :   OVR_SysFile.cpp
Content     :   File wrapper class implementation (Win32)

Created     :   April 5, 1999
Authors     :   Michael Antonov

Copyright   :   Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.

Licensed under the Oculus Master SDK License Version 1.0 (the "License");
you may not use the Oculus VR Rift SDK except in compliance with the License,
which is provided at the time of installation or download, or which
otherwise accompanies this software in either electronic or hard copy form.

You may obtain a copy of the License at

https://developer.oculus.com/licenses/oculusmastersdk-1.0

Unless required by applicable law or agreed to in writing, the Oculus VR SDK
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

**************************************************************************/

#define GFILE_CXX

// Standard C library (Captain Obvious guarantees!)
#include <stdio.h>

#include "OVR_File.h"
#include "OVR_SysFile.h"

namespace OVR {

// This is - a dummy file that fails on all calls.

class UnopenedFile : public File {
 public:
  UnopenedFile() {}
  ~UnopenedFile() {}

  virtual const char* GetFilePath() {
    return 0;
  }

  // ** File Information
  virtual bool IsValid() {
    return 0;
  }
  virtual bool IsWritable() {
    return 0;
  }

  // Return position / file size
  virtual int Tell() {
    return 0;
  }
  virtual int64_t LTell() {
    return 0;
  }
  virtual int GetLength() {
    return 0;
  }
  virtual int64_t LGetLength() {
    return 0;
  }

  //  virtual bool        Stat(FileStats *pfs)        { return 0; }
  virtual int GetErrorCode() {
    return Error_FileNotFound;
  }

  // ** Stream implementation & I/O
  virtual int Write(const uint8_t* /*pbuffer*/, int /*numBytes*/) {
    return -1;
  }
  virtual int Read(uint8_t* /*pbuffer*/, int /*numBytes*/) {
    return -1;
  }
  virtual int SkipBytes(int /*numBytes*/) {
    return 0;
  }
  virtual int BytesAvailable() {
    return 0;
  }
  virtual bool Flush() {
    return 0;
  }
  virtual int Seek(int /*offset*/, int /*origin*/) {
    return -1;
  }
  virtual int64_t LSeek(int64_t /*offset*/, int /*origin*/) {
    return -1;
  }

  virtual int CopyFromStream(File* /*pstream*/, int /*byteSize*/) {
    return -1;
  }
  virtual bool Close() {
    return 0;
  }
};

// ***** System File

// System file is created to access objects on file system directly
// This file can refer directly to path

// ** Constructor
SysFile::SysFile() : DelegatedFile(0) {
  pFile = *new UnopenedFile;
}

Ptr<File> FileFILEOpen(const String& path, int flags, int mode);

// Opens a file
SysFile::SysFile(const String& path, int flags, int mode) : DelegatedFile(0) {
  Open(path, flags, mode);
}

// ** Open & management
// Will fail if file's already open
bool SysFile::Open(const String& path, int flags, int mode) {
  pFile = FileFILEOpen(path, flags, mode);
  if ((!pFile) || (!pFile->IsValid())) {
    pFile = *new UnopenedFile;
    return 0;
  }
  // pFile = *OVR_NEW DelegatedFile(pFile); // MA Testing
  if (flags & Open_Buffered)
    pFile = *new BufferedFile(pFile);
  return 1;
}

// ** Overrides

int SysFile::GetErrorCode() {
  return pFile ? pFile->GetErrorCode() : Error_FileNotFound;
}

// Overrides to provide re-open support
bool SysFile::IsValid() {
  return pFile && pFile->IsValid();
}
bool SysFile::Close() {
  if (IsValid()) {
    DelegatedFile::Close();
    pFile = *new UnopenedFile;
    return 1;
  }
  return 0;
}

} // namespace OVR