@@ -524,18 +524,44 @@ static void FreeStructData(const StructInfo* info, u8* base) {
524524 for (size_t i = 0 ; i < info->fieldCount ; i++) {
525525 const FieldInfo& field = info->fields [i];
526526 u8 * fieldPtr = base + field.offset ;
527- if (SettingType::Struct == field.type || SettingType::Prerelease == field.type ) {
528- FreeStructData (GetSubstruct (field), fieldPtr);
529- } else if (SettingType::Array == field.type ) {
530- FreeArray (*(Vec<void *>**)fieldPtr, field);
531- } else if (SettingType::String == field.type ) {
532- void * m = *((void **)fieldPtr);
533- free (m);
534- } else if (SettingType::FloatArray == field.type || SettingType::IntArray == field.type ) {
535- Vec<int >* v = *((Vec<int >**)fieldPtr);
536- delete v;
537- } else if (SettingType::StringArray == field.type || SettingType::ColorArray == field.type ) {
538- FreeUtf8StringArray (*(Vec<char *>**)fieldPtr);
527+ switch (field.type ) {
528+ case SettingType::Bool:
529+ case SettingType::Int:
530+ case SettingType::Float:
531+ case SettingType::Comment:
532+ // nothing to free
533+ break ;
534+ case SettingType::Struct:
535+ case SettingType::Prerelease: {
536+ const StructInfo* substruct = GetSubstruct (field);
537+ FreeStructData (substruct, fieldPtr);
538+ break ;
539+ }
540+ case SettingType::Array: {
541+ Vec<void *>* array = *(Vec<void *>**)fieldPtr;
542+ FreeArray (array, field);
543+ break ;
544+ }
545+ case SettingType::Color:
546+ case SettingType::String: {
547+ void * str = *((void **)fieldPtr);
548+ free (str);
549+ break ;
550+ }
551+ case SettingType::FloatArray:
552+ case SettingType::IntArray: {
553+ Vec<int >* vec = *((Vec<int >**)fieldPtr);
554+ delete vec;
555+ break ;
556+ }
557+ case SettingType::StringArray:
558+ case SettingType::ColorArray: {
559+ Vec<char *>* strArray = *(Vec<char *>**)fieldPtr;
560+ FreeUtf8StringArray (strArray);
561+ break ;
562+ }
563+ default :
564+ break ;
539565 }
540566 }
541567}
0 commit comments