| 171 | } |
| 172 | |
| 173 | void CLocatorAPI::Register(LPCSTR name, size_t vfs, u32 ptr, u32 size_real, u32 size_compressed, u32 time_write, bool folder) |
| 174 | { |
| 175 | string256 temp_file_name; |
| 176 | strcpy_s(temp_file_name, name); |
| 177 | xr_strlwr(temp_file_name); |
| 178 | |
| 179 | // Register file |
| 180 | file desc; |
| 181 | |
| 182 | desc.vfs = vfs; |
| 183 | desc.ptr = ptr; |
| 184 | desc.size_real = size_real; |
| 185 | desc.size_compressed = size_compressed; |
| 186 | desc.time_write = time_write & (~u32(0x3)); |
| 187 | desc.folder = folder; |
| 188 | |
| 189 | // if file already exist - update info |
| 190 | if (const files_it I = file_find_it(temp_file_name); I != files.end()) |
| 191 | { |
| 192 | desc.name = I->name; |
| 193 | |
| 194 | // sad but true, performance option |
| 195 | // correct way is to erase and then insert new record: |
| 196 | const_cast<file&>(*I) = desc; |
| 197 | return; |
| 198 | } |
| 199 | |
| 200 | desc.name = xr_strdup(temp_file_name); |
| 201 | |
| 202 | // otherwise insert file |
| 203 | files.insert(desc); |
| 204 | |
| 205 | // Try to register folder(s) |
| 206 | RegisterFolderHierarchy(desc.name); |
| 207 | } |
| 208 | |
| 209 | void CLocatorAPI::RegisterFolderHierarchy(LPCSTR folder_path) |
| 210 | { |