(svn r11096) -Fix: when 2 different GRF-files had the same name (e.g.: ""), the double-entry checker didn't always work correctly, resulting in multiple entries of the same grf in the list
authortruelight
Thu, 13 Sep 2007 18:26:18 +0000
changeset 8067 1a31a15e638d
parent 8066 7acd480e05c9
child 8068 5dd156184d13
(svn r11096) -Fix: when 2 different GRF-files had the same name (e.g.: ""), the double-entry checker didn't always work correctly, resulting in multiple entries of the same grf in the list
src/newgrf_config.cpp
--- a/src/newgrf_config.cpp	Thu Sep 13 18:22:34 2007 +0000
+++ b/src/newgrf_config.cpp	Thu Sep 13 18:26:18 2007 +0000
@@ -315,9 +315,14 @@
 					/* Insert file into list at a position determined by its
 					 * name, so the list is sorted as we go along */
 					GRFConfig **pd, *d;
+					bool stop = false;
 					for (pd = &_all_grfs; (d = *pd) != NULL; pd = &d->next) {
 						if (c->grfid == d->grfid && memcmp(c->md5sum, d->md5sum, sizeof(c->md5sum)) == 0) added = false;
-						if (strcasecmp(c->name, d->name) <= 0) break;
+						/* Because there can be multiple grfs with the same name, make sure we checked all grfs with the same name,
+						*  before inserting the entry. So insert a new grf at the end of all grfs with the same name, instead of
+						*  just after the first with the same name. Avoids doubles in the list. */
+						if (strcasecmp(c->name, d->name) <= 0) stop = true;
+						else if (stop) break;
 					}
 					if (added) {
 						c->next = d;