From 72901bc7a5adaa97f0cc4e9ad6f1aa8a10490378 Mon Sep 17 00:00:00 2001 From: Maschell Date: Tue, 9 Aug 2022 16:02:38 +0200 Subject: [PATCH] Improve file reading --- src/utils/FileUtils.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/utils/FileUtils.cpp b/src/utils/FileUtils.cpp index f7b5b32..35a18cd 100644 --- a/src/utils/FileUtils.cpp +++ b/src/utils/FileUtils.cpp @@ -4,7 +4,6 @@ #include #include - #define ROUNDDOWN(val, align) ((val) & ~(align - 1)) #define ROUNDUP(val, align) ROUNDDOWN(((val) + (align - 1)), align) @@ -20,8 +19,13 @@ int32_t LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_t *size) return -1; } - uint32_t filesize = lseek(iFd, 0, SEEK_END); - lseek(iFd, 0, SEEK_SET); + struct stat file_stat; + int rc = fstat(iFd, &file_stat); + if (rc < 0) { + close(iFd); + return -4; + } + uint32_t filesize = file_stat.st_size; auto *buffer = (uint8_t *) memalign(0x40, ROUNDUP(filesize, 0x40)); if (buffer == nullptr) { @@ -29,7 +33,7 @@ int32_t LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_t *size) return -2; } - uint32_t blocksize = 0x20000; + uint32_t blocksize = 0x80000; uint32_t done = 0; int32_t readBytes; @@ -38,8 +42,9 @@ int32_t LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_t *size) blocksize = filesize - done; } readBytes = read(iFd, buffer + done, blocksize); - if (readBytes <= 0) + if (readBytes <= 0) { break; + } done += readBytes; }