| 152 | } |
| 153 | |
| 154 | bool LabArchive::seekFile(s32 offset, s32 origin) |
| 155 | { |
| 156 | if (m_curFile < 0) { return false; } |
| 157 | size_t size = m_entries[m_curFile].len; |
| 158 | |
| 159 | switch (origin) |
| 160 | { |
| 161 | case SEEK_SET: |
| 162 | { |
| 163 | m_fileOffset = offset; |
| 164 | } break; |
| 165 | case SEEK_CUR: |
| 166 | { |
| 167 | m_fileOffset += offset; |
| 168 | } break; |
| 169 | case SEEK_END: |
| 170 | { |
| 171 | m_fileOffset = (s32)size - offset; |
| 172 | } break; |
| 173 | } |
| 174 | assert(m_fileOffset <= size && m_fileOffset >= 0); |
| 175 | if (m_fileOffset > size || m_fileOffset < 0) |
| 176 | { |
| 177 | m_fileOffset = 0; |
| 178 | return false; |
| 179 | } |
| 180 | |
| 181 | m_file.seek(m_entries[m_curFile].dataOffset + m_fileOffset); |
| 182 | return true; |
| 183 | } |
| 184 | |
| 185 | size_t LabArchive::getLocInFile() |
| 186 | { |