summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--network_gamelist.c5
-rw-r--r--newgrf_config.c18
-rw-r--r--newgrf_config.h2
3 files changed, 14 insertions, 11 deletions
diff --git a/network_gamelist.c b/network_gamelist.c
index f52272307..bcc75ad7e 100644
--- a/network_gamelist.c
+++ b/network_gamelist.c
@@ -59,9 +59,10 @@ void NetworkGameListRemoveItem(NetworkGameList *remove)
}
/* Remove GRFConfig information */
- ClearGRFConfigList(remove->info.grfconfig);
-
+ ClearGRFConfigList(&remove->info.grfconfig);
free(remove);
+ remove = NULL;
+
DEBUG(net, 4) ("[NET][GameList] Removed server from list");
UpdateNetworkGameWindow(false);
return;
diff --git a/newgrf_config.c b/newgrf_config.c
index b0f06d110..6caec3e04 100644
--- a/newgrf_config.c
+++ b/newgrf_config.c
@@ -96,17 +96,21 @@ void ClearGRFConfig(GRFConfig **config)
/* Clear a GRF Config list */
-void ClearGRFConfigList(GRFConfig *config)
+void ClearGRFConfigList(GRFConfig **config)
{
GRFConfig *c, *next;
- for (c = config; c != NULL; c = next) {
+ for (c = *config; c != NULL; c = next) {
next = c->next;
ClearGRFConfig(&c);
}
+ *config = NULL;
}
-/* Copy a GRF Config list */
+/** Copy a GRF Config list
+ * @param dst pointer to destination list
+ * @param srt pointer to source list values
+ * @return pointer to the last value added to the destination list */
GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src)
{
GRFConfig *c;
@@ -131,8 +135,7 @@ void ResetGRFConfig(bool defaults)
{
GRFConfig **c = &_grfconfig;
- ClearGRFConfigList(_grfconfig);
- _grfconfig = NULL;
+ ClearGRFConfigList(c);
if (defaults) c = CopyGRFConfigList(c, _grfconfig_newgame);
CopyGRFConfigList(c, _grfconfig_static);
@@ -244,8 +247,7 @@ void ScanNewGRFFiles(void)
{
uint num;
- ClearGRFConfigList(_all_grfs);
- _all_grfs = NULL;
+ ClearGRFConfigList(&_all_grfs);
DEBUG(grf, 1) ("[GRF] Scanning for NewGRFs");
num = ScanPath(_paths.data_dir);
@@ -388,7 +390,7 @@ static void Load_NGRF(void)
/* Append static NewGRF configuration */
CopyGRFConfigList(last, _grfconfig_static);
- ClearGRFConfigList(_grfconfig);
+ ClearGRFConfigList(&_grfconfig);
_grfconfig = first;
}
diff --git a/newgrf_config.h b/newgrf_config.h
index c6f49bb60..b0660e3a6 100644
--- a/newgrf_config.h
+++ b/newgrf_config.h
@@ -45,7 +45,7 @@ const GRFConfig *FindGRFConfig(uint32 grfid, uint8 *md5sum);
GRFConfig *GetGRFConfig(uint32 grfid);
GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src);
void ClearGRFConfig(GRFConfig **config);
-void ClearGRFConfigList(GRFConfig *config);
+void ClearGRFConfigList(GRFConfig **config);
void ResetGRFConfig(bool defaults);
bool IsGoodGRFConfigList(void);
bool FillGRFDetails(GRFConfig *config, bool is_static);