MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / loadICU

Method loadICU

src/common/unicode_util.cpp:1142–1273  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1140}
1141
1142UnicodeUtil::ICU* UnicodeUtil::loadICU(const string& icuVersion, const string& configInfo)
1143{
1144 ObjectsArray<string> versions;
1145 getVersions(configInfo, versions);
1146
1147 if (versions.isEmpty())
1148 gds__log("No ICU versions specified");
1149
1150 string version = icuVersion.isEmpty() ? versions[0] : icuVersion;
1151 if (version == "default")
1152 version = UnicodeUtil::getDefaultIcuVersion();
1153
1154 for (ObjectsArray<string>::const_iterator i(versions.begin()); i != versions.end(); ++i)
1155 {
1156 int majorVersion, minorVersion;
1157 int n = sscanf((*i == "default" ? version : *i).c_str(), "%d.%d",
1158 &majorVersion, &minorVersion);
1159
1160 if (n == 1)
1161 minorVersion = 0;
1162 else if (n != 2)
1163 continue;
1164
1165 string configVersion;
1166 configVersion.printf("%d.%d", majorVersion, minorVersion);
1167 if (version != configVersion)
1168 {
1169 minorVersion = 0;
1170 configVersion.printf("%d", majorVersion);
1171 if (version != configVersion)
1172 continue;
1173 }
1174
1175 ReadLockGuard readGuard(icuModules->lock, "UnicodeUtil::loadICU");
1176
1177 ICU* icu;
1178 if (icuModules->modules.get(version, icu))
1179 return icu;
1180
1181 icu = FB_NEW_POOL(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion);
1182
1183#ifdef ANDROID
1184 auto dataModule = icu->formatAndLoad(dataTemplate);
1185#endif
1186
1187 icu->ucModule = icu->formatAndLoad(ucTemplate);
1188
1189#ifdef ANDROID
1190 delete dataModule;
1191#endif
1192
1193 if (!icu->ucModule)
1194 {
1195 gds__log("failed to load UC icu module version %s", configVersion.c_str());
1196 delete icu;
1197 continue;
1198 }
1199

Callers

nothing calls this directly

Calls 15

getVersionsFunction · 0.85
getDefaultMemoryPoolFunction · 0.85
ICUClass · 0.85
iscLogStatusFunction · 0.85
GdsClass · 0.85
formatAndLoadMethod · 0.80
isEmptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
c_strMethod · 0.45
printfMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected