| 603 | } |
| 604 | |
| 605 | static Result LoadFromFileInternal(const char* url, int argc, const char** argv, HConfig* config) |
| 606 | { |
| 607 | #ifdef __ANDROID__ |
| 608 | // TODO: |
| 609 | // This is not pretty but we wan't use dmSys::LoadResource() |
| 610 | // on all platforms as we must be able |
| 611 | // to load from any path (file:///...) |
| 612 | // We should probably add a new scheme resource: or similar |
| 613 | // to solve this situation. |
| 614 | uint32_t buffer_size = 1024 * 256; |
| 615 | void* buffer = malloc(buffer_size); |
| 616 | |
| 617 | uint32_t project_size; |
| 618 | dmSys::Result sysr = dmSys::LoadResource(url, buffer, buffer_size, &project_size); |
| 619 | if (sysr != dmSys::RESULT_OK) { |
| 620 | return RESULT_FILE_NOT_FOUND; |
| 621 | } |
| 622 | |
| 623 | Result r = LoadFromBufferInternal(url, (const char*) buffer, project_size, argc, argv, config); |
| 624 | free(buffer); |
| 625 | return r; |
| 626 | #else |
| 627 | FILE* f = fopen(url, "rb"); |
| 628 | if (!f) |
| 629 | { |
| 630 | return RESULT_FILE_NOT_FOUND; |
| 631 | } |
| 632 | fseek(f, 0, SEEK_END); |
| 633 | long file_size = ftell(f); |
| 634 | fseek(f, 0, SEEK_SET); |
| 635 | |
| 636 | char* buffer = new char[file_size]; |
| 637 | if (fread(buffer, 1, file_size, f) != (size_t) file_size) |
| 638 | { |
| 639 | fclose(f); |
| 640 | delete[] buffer; |
| 641 | return RESULT_UNEXPECTED_EOF; |
| 642 | } |
| 643 | fclose(f); |
| 644 | |
| 645 | Result r = LoadFromBufferInternal(url, buffer, file_size, argc, argv, config); |
| 646 | delete[] buffer; |
| 647 | |
| 648 | return r; |
| 649 | #endif |
| 650 | } |
| 651 | |
| 652 | Result LoadFromBuffer(const char* buffer, uint32_t buffer_size, int argc, const char** argv, HConfig* config) |
| 653 | { |
no test coverage detected