diff --git a/src/ui/botpanel.cpp b/src/ui/botpanel.cpp index ba5e8ba41..5528fb0d8 100644 --- a/src/ui/botpanel.cpp +++ b/src/ui/botpanel.cpp @@ -348,16 +348,24 @@ int AddButton(int pos, int level, const char *icon_ident, return 1; } -/// FIXME: docu +/** +** Cleanup buttons. +*/ global void DoneButtons(void) { int z; for (z = 0; z < UnitButtonCount; z++) { DebugCheck(!UnitButtonTable[z]); - free(UnitButtonTable[z]->ValueStr); - free(UnitButtonTable[z]->Hint); - free(UnitButtonTable[z]->UnitMask); + if( UnitButtonTable[z]->ValueStr ) { + free(UnitButtonTable[z]->ValueStr); + } + if( UnitButtonTable[z]->Hint ) { + free(UnitButtonTable[z]->Hint); + } + if( UnitButtonTable[z]->UnitMask ) { + free(UnitButtonTable[z]->UnitMask); + } free(UnitButtonTable[z]); } UnitButtonCount = 0; diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp index d41ddbc67..3213aaff1 100644 --- a/src/ui/script_ui.cpp +++ b/src/ui/script_ui.cpp @@ -1198,10 +1198,18 @@ local SCM CclDefineButton(SCM list) } AddButton(ba.Pos,ba.Level,ba.Icon.Name,ba.Action,ba.ValueStr, ba.Allowed,ba.AllowStr,ba.Key,ba.Hint,ba.UnitMask); - free(ba.ValueStr); - free(ba.AllowStr); - free(ba.Hint); - free(ba.UnitMask); + if( ba.ValueStr ) { + free(ba.ValueStr); + } + if( ba.AllowStr ) { + free(ba.AllowStr); + } + if( ba.Hint ) { + free(ba.Hint); + } + if( ba.UnitMask ) { + free(ba.UnitMask); + } return SCM_UNSPECIFIED; } diff --git a/src/unit/upgrade.cpp b/src/unit/upgrade.cpp index d991a1f43..884e93d49 100644 --- a/src/unit/upgrade.cpp +++ b/src/unit/upgrade.cpp @@ -1102,7 +1102,9 @@ local SCM CclDefineUpgrade(SCM list) if( gh_eq_p(value,gh_symbol2scm("icon")) ) { // Icon - free(icon); + if( icon ) { + free(icon); + } icon=gh_scm2newstr(gh_car(list),NULL); list=gh_cdr(list); } else if( gh_eq_p(value,gh_symbol2scm("costs")) ) {