| 419 | } |
| 420 | |
| 421 | Result LoadResource(const char* path, void* buffer, uint32_t buffer_size, uint32_t* resource_size) |
| 422 | { |
| 423 | *resource_size = 0; |
| 424 | |
| 425 | AAssetManager* am = GetAndroidAssetManager(); |
| 426 | if (am) |
| 427 | { |
| 428 | const char* asset_path = FixAndroidResourcePath(path); |
| 429 | |
| 430 | // NOTE: AASSET_MODE_BUFFER is much faster than AASSET_MODE_RANDOM. |
| 431 | AAsset* asset = AAssetManager_open(am, asset_path, AASSET_MODE_BUFFER); |
| 432 | if (asset) |
| 433 | { |
| 434 | uint32_t asset_size = (uint32_t)AAsset_getLength(asset); |
| 435 | if (asset_size > buffer_size) |
| 436 | { |
| 437 | AAsset_close(asset); |
| 438 | return RESULT_INVAL; |
| 439 | } |
| 440 | uint32_t nread = (uint32_t)AAsset_read(asset, buffer, asset_size); |
| 441 | AAsset_close(asset); |
| 442 | if (nread != asset_size) |
| 443 | { |
| 444 | return RESULT_IO; |
| 445 | } |
| 446 | *resource_size = asset_size; |
| 447 | return RESULT_OK; |
| 448 | } |
| 449 | } |
| 450 | |
| 451 | return dmSysPosix::LoadResource(path, buffer, buffer_size, resource_size); |
| 452 | } |
| 453 | |
| 454 | Result LoadResourcePartial(const char* path, uint32_t offset, uint32_t size, void* buffer, uint32_t* nread) |
| 455 | { |
nothing calls this directly
no test coverage detected