summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base_media_base.h2
-rw-r--r--src/base_media_func.h3
-rw-r--r--src/music.cpp5
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);