diff options
author | Niels Martin Hansen <nielsm@indvikleren.dk> | 2018-06-07 21:34:24 +0200 |
---|---|---|
committer | Michael Lutz <michi@icosahedron.de> | 2018-06-15 23:09:17 +0200 |
commit | 5ab06ef8a3a5291ddc9bbee7f73f04bd077272e0 (patch) | |
tree | c1760bdf0e54c1bf8c519a0457078f621050f230 | |
parent | a1b7812c7e5e7a25a9eb51fd397b19606451f8e6 (diff) | |
download | openttd-5ab06ef8a3a5291ddc9bbee7f73f04bd077272e0.tar.xz |
Fix: Don't complain if CAT music files are missing entirely
Just complain if an index into a CAT file that exists is invalid.
-rw-r--r-- | src/base_media_base.h | 2 | ||||
-rw-r--r-- | src/base_media_func.h | 3 | ||||
-rw-r--r-- | src/music.cpp | 5 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/base_media_base.h b/src/base_media_base.h index 891ce4fb9..b040abcf9 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -26,6 +26,7 @@ struct ContentInfo; struct MD5File { /** The result of a checksum check */ enum ChecksumResult { + CR_UNKNOWN, ///< The file has not been checked yet CR_MATCH, ///< The file did exist and the md5 checksum did match CR_MISMATCH, ///< The file did exist, just the md5 checksum did not match CR_NO_FILE, ///< The file did not exist @@ -34,6 +35,7 @@ struct MD5File { const char *filename; ///< filename uint8 hash[16]; ///< md5 sum of the file const char *missing_warning; ///< warning when this file is missing + ChecksumResult check_result; ///< cached result of md5 check ChecksumResult CheckMD5(Subdirectory subdir, size_t max_size) const; }; diff --git a/src/base_media_func.h b/src/base_media_func.h index f45956f76..f30824ad2 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -129,7 +129,8 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const file->missing_warning = stredup(item->value); } - switch (T::CheckMD5(file, BASESET_DIR)) { + file->check_result = T::CheckMD5(file, BASESET_DIR); + switch (file->check_result) { case MD5File::CR_MATCH: this->valid_files++; this->found_files++; diff --git a/src/music.cpp b/src/music.cpp index 65e35f955..ffb1d7590 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -128,7 +128,7 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f IniGroup *timingtrim = ini->GetGroup("timingtrim"); for (uint i = 0, j = 1; i < lengthof(this->songinfo); i++) { const char *filename = this->files[i].filename; - if (names == NULL || StrEmpty(filename)) { + if (names == NULL || StrEmpty(filename) || this->files[i].check_result == MD5File::CR_NO_FILE) { this->songinfo[i].songname[0] = '\0'; continue; } @@ -143,7 +143,8 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index); if (songname == NULL) { DEBUG(grf, 0, "Base music set song missing from CAT file: %s/%d", filename, this->songinfo[i].cat_index); - return false; + this->songinfo[i].songname[0] = '\0'; + continue; } strecpy(this->songinfo[i].songname, songname, lastof(this->songinfo[i].songname)); free(songname); |