| 290 | } |
| 291 | |
| 292 | const ParamEntry* FindConfigParamEntry(const char* path) |
| 293 | { |
| 294 | if (*path == 0) |
| 295 | { |
| 296 | return nullptr; |
| 297 | } |
| 298 | // check path base |
| 299 | const ParamEntry* entry = nullptr; |
| 300 | Poseidon::Foundation::RString base = Poseidon::PathFirstFolder(path); |
| 301 | if (!strcmpi(base, "cfg")) |
| 302 | { |
| 303 | entry = &Pars; |
| 304 | } |
| 305 | else if (!strcmpi(base, "rsc")) |
| 306 | { |
| 307 | entry = &Res; |
| 308 | } |
| 309 | else |
| 310 | { |
| 311 | LOG_DEBUG(Core, "Invalid base in {}", path); |
| 312 | return nullptr; |
| 313 | } |
| 314 | path += strlen(base) + 1; |
| 315 | |
| 316 | while (strlen(path) > 0) |
| 317 | { |
| 318 | Poseidon::Foundation::RString base = Poseidon::PathFirstFolder(path); |
| 319 | if (base.GetLength() <= 0) |
| 320 | { |
| 321 | ParamEntry* nEntry = entry->FindEntry(path); |
| 322 | if (!nEntry) |
| 323 | { |
| 324 | break; |
| 325 | } |
| 326 | if (!nEntry->IsClass()) |
| 327 | { |
| 328 | break; |
| 329 | } |
| 330 | entry = nEntry; |
| 331 | break; |
| 332 | } |
| 333 | else |
| 334 | { |
| 335 | ParamEntry* nEntry = entry->FindEntry(base); |
| 336 | if (!nEntry) |
| 337 | { |
| 338 | break; |
| 339 | } |
| 340 | if (!nEntry->IsClass()) |
| 341 | { |
| 342 | break; |
| 343 | } |
| 344 | entry = nEntry; |
| 345 | path += strlen(base) + 1; |
| 346 | } |
| 347 | } |
| 348 | return entry; |
| 349 | } |
no test coverage detected