| 486 | } |
| 487 | |
| 488 | static s32 write_data_versions(FilesystemDisk &data_fs |
| 489 | , const char *filename |
| 490 | , const HashMap<StringId64, u32> &versions |
| 491 | , const HashMap<StringId64, DataCompiler::ResourceTypeData> &compilers |
| 492 | ) |
| 493 | { |
| 494 | StringStream ss(default_allocator()); |
| 495 | DynamicString temp_filename(default_allocator()); |
| 496 | |
| 497 | File *file = data_fs.open_temporary(temp_filename); |
| 498 | if (file->is_open()) { |
| 499 | auto cur = hash_map::begin(versions); |
| 500 | auto end = hash_map::end(versions); |
| 501 | for (; cur != end; ++cur) { |
| 502 | HASH_MAP_SKIP_HOLE(versions, cur); |
| 503 | |
| 504 | DataCompiler::ResourceTypeData rtd; |
| 505 | rtd.type_str = NULL; |
| 506 | rtd = hash_map::get(compilers, cur->first, rtd); |
| 507 | if (rtd.type_str != NULL) |
| 508 | ss << rtd.type_str << " = " << cur->second << "\n"; |
| 509 | } |
| 510 | |
| 511 | u32 ss_len = strlen32(string_stream::c_str(ss)); |
| 512 | if (ss_len != file->write(string_stream::c_str(ss), ss_len)) { |
| 513 | data_fs.close(*file); |
| 514 | return -1; |
| 515 | } |
| 516 | } |
| 517 | data_fs.close(*file); |
| 518 | |
| 519 | RenameResult rr = data_fs.rename(temp_filename.c_str(), filename); |
| 520 | return rr.error == RenameResult::SUCCESS ? 0 : -1; |
| 521 | } |
| 522 | |
| 523 | static s32 write_data_mtimes(FilesystemDisk &data_fs, const char *filename, const HashMap<StringId64, u64> &mtimes) |
| 524 | { |
no test coverage detected