From 5ab06ef8a3a5291ddc9bbee7f73f04bd077272e0 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 7 Jun 2018 21:34:24 +0200 Subject: Fix: Don't complain if CAT music files are missing entirely Just complain if an index into a CAT file that exists is invalid. --- src/base_media_base.h | 2 ++ src/base_media_func.h | 3 ++- 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::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); -- cgit v1.2.3-70-g09d2