aboutsummaryrefslogtreecommitdiff
path: root/src/common/DataStores/DB2FileLoader.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-06-29 00:10:37 +0200
committerShauren <shauren.trinity@gmail.com>2020-06-29 00:10:37 +0200
commit2fcb79e2de5b17716294304e494ac99e883c6e64 (patch)
tree1ef4656692df60973d303c3087e67eee7ba95487 /src/common/DataStores/DB2FileLoader.cpp
parent6040f8eb3167ee84cac9de5e6e1a97aeb6a8c569 (diff)
Core/DataStores: Fixed loading db2 strings
Closes #24916
Diffstat (limited to 'src/common/DataStores/DB2FileLoader.cpp')
-rw-r--r--src/common/DataStores/DB2FileLoader.cpp32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp
index f7cdd8ff35c..9ff9a7b4c2d 100644
--- a/src/common/DataStores/DB2FileLoader.cpp
+++ b/src/common/DataStores/DB2FileLoader.cpp
@@ -522,6 +522,9 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char** indexTable, uint32 ind
return nullptr;
}
+ if (!_loadInfo->GetStringFieldCount(false))
+ return nullptr;
+
char* stringPool = new char[_header->StringTableSize];
memcpy(stringPool, _stringTable, _header->StringTableSize);
@@ -1111,29 +1114,15 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable
offset += 8;
break;
case FT_STRING:
- {
- LocalizedString* slot = (LocalizedString*)(&dataTable[offset]);
- for (uint32 locale = 0; locale < TOTAL_LOCALES; ++locale)
- {
- slot->Str[locale] = nullStr;
- if (_header->Locale & (1 << locale))
- slot->Str[locale] = stringPtr;
- }
+ for (char const*& localeStr : ((LocalizedString*)(&dataTable[offset]))->Str)
+ localeStr = nullStr;
- strcpy(stringPtr, RecordGetString(rawRecord, x, z));
- stringPtr += strlen(stringPtr) + 1;
offset += sizeof(LocalizedString);
break;
- }
case FT_STRING_NOT_LOCALIZED:
- {
- char const** slot = (char const**)(&dataTable[offset]);
- *slot = stringPtr;
- strcpy(stringPtr, RecordGetString(rawRecord, x, z));
- stringPtr += strlen(stringPtr) + 1;
+ *(char const**)(&dataTable[offset]) = nullStr;
offset += sizeof(char*);
break;
- }
default:
ASSERT(false, "Unknown format character '%c' found in %s meta for field %s",
_loadInfo->TypesString[fieldIndex], _fileName, _loadInfo->Fields[fieldIndex].Name);
@@ -1204,6 +1193,9 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char** indexTable, uint32 inde
std::size_t stringFields = _loadInfo->GetStringFieldCount(false);
std::size_t localizedStringFields = _loadInfo->GetStringFieldCount(true);
+ if (!stringFields)
+ return nullptr;
+
std::size_t stringsInRecordSize = (stringFields - localizedStringFields) * sizeof(char*);
std::size_t localizedStringsInRecordSize = localizedStringFields * sizeof(LocalizedString);
@@ -1276,8 +1268,14 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char** indexTable, uint32 inde
break;
}
case FT_STRING_NOT_LOCALIZED:
+ {
+ char const** db2str = (char const**)(&recordData[offset]);
+ *db2str = stringPtr;
+ strcpy(stringPtr, RecordGetString(rawRecord, x, z));
+ stringPtr += strlen(stringPtr) + 1;
offset += sizeof(char*);
break;
+ }
default:
ASSERT(false, "Unknown format character '%c' found in %s meta for field %s",
_loadInfo->TypesString[fieldIndex], _fileName, _loadInfo->Fields[fieldIndex].Name);