| 1140 | } |
| 1141 | |
| 1142 | UnicodeUtil::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 |
nothing calls this directly
no test coverage detected