(svn r8980) -Fix (FS#656): the industry list should also be (re)set when the number of industries is 0.

This commit is contained in:
rubidium 2007-03-02 19:57:55 +00:00
parent 517f2bcc57
commit 6887fbbaaf
1 changed files with 11 additions and 6 deletions

View File

@ -552,25 +552,30 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
return r;
}
/**
* Makes a sorted industry list.
* When there are no industries, the list has to be made. This so when one
* starts a new game without industries after playing a game with industries
* the list is not populated with invalid industries from the previous game.
*/
static void MakeSortedIndustryList(void)
{
const Industry* i;
int n = 0;
/* Don't attempt a sort if there are no industries */
if (GetNumIndustries() == 0) return;
/* Create array for sorting */
_industry_sort = ReallocT(_industry_sort, GetMaxIndustryIndex() + 1);
if (_industry_sort == NULL) error("Could not allocate memory for the industry-sorting-list");
FOR_ALL_INDUSTRIES(i) _industry_sort[n++] = i;
/* Don't attempt a sort if there are no industries */
if (GetNumIndustries() != 0) {
FOR_ALL_INDUSTRIES(i) _industry_sort[n++] = i;
qsort((void*)_industry_sort, n, sizeof(_industry_sort[0]), GeneralIndustrySorter);
}
_num_industry_sort = n;
_last_industry = NULL; // used for "cache"
qsort((void*)_industry_sort, n, sizeof(_industry_sort[0]), GeneralIndustrySorter);
DEBUG(misc, 3, "Resorting industries list");
}