| 100 | } |
| 101 | |
| 102 | void FileStream::Read(void* ptr, int size) |
| 103 | { |
| 104 | if (mCacheBuffer != NULL) |
| 105 | { |
| 106 | while (true) |
| 107 | { |
| 108 | int buffOffset = mVFilePos - mCacheReadPos; |
| 109 | if ((buffOffset >= 0) && (buffOffset + size < mCacheSize)) |
| 110 | { |
| 111 | // If inside |
| 112 | memcpy(ptr, mCacheBuffer + buffOffset, size); |
| 113 | mVFilePos += size; |
| 114 | return; |
| 115 | } |
| 116 | else if ((buffOffset >= 0) && (buffOffset < mCacheSize)) |
| 117 | { |
| 118 | int subSize = mCacheReadPos + mCacheSize - mVFilePos; |
| 119 | memcpy(ptr, mCacheBuffer + buffOffset, subSize); |
| 120 | mVFilePos += subSize; |
| 121 | |
| 122 | ptr = (uint8*) ptr + subSize; |
| 123 | size -= subSize; |
| 124 | } |
| 125 | |
| 126 | mCacheReadPos = mVFilePos & ~(4096-1); |
| 127 | fseek(mFP, mCacheReadPos, SEEK_SET); |
| 128 | int aSize = (int)fread(mCacheBuffer, 1, mCacheSize, mFP); |
| 129 | if (aSize != mCacheSize) |
| 130 | { |
| 131 | // Zero out underflow bytes |
| 132 | memset((uint8*) ptr + aSize, 0, mCacheSize - aSize); |
| 133 | } |
| 134 | } |
| 135 | } |
| 136 | else |
| 137 | { |
| 138 | int aSize = (int)fread(ptr, 1, size, mFP); |
| 139 | if (aSize != size) |
| 140 | { |
| 141 | // Zero out underflow bytes |
| 142 | memset((uint8*) ptr + aSize, 0, size - aSize); |
| 143 | mReadPastEnd = true; |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | void FileStream::Write(void* ptr, int size) |
| 149 | { |
nothing calls this directly
no test coverage detected