diff options
author | David Crocker <dcrocker@eschertech.com> | 2021-08-16 11:35:07 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2021-08-16 11:35:07 +0300 |
commit | e85769b33f390eb5b951710b84d2cd3223d45757 (patch) | |
tree | 754fcab51c242ce4f3064df3556331cc53fee7c2 /src | |
parent | dec742c246bf27d2fc84dc153e5db46d3c5d08cb (diff) |
More work on embedded files
Diffstat (limited to 'src')
-rw-r--r-- | src/Storage/EmbeddedFiles.cpp | 34 | ||||
-rw-r--r-- | src/Storage/FileStore.cpp | 9 | ||||
-rw-r--r-- | src/Storage/MassStorage.h | 2 |
3 files changed, 38 insertions, 7 deletions
diff --git a/src/Storage/EmbeddedFiles.cpp b/src/Storage/EmbeddedFiles.cpp index c58f8494..d44363e1 100644 --- a/src/Storage/EmbeddedFiles.cpp +++ b/src/Storage/EmbeddedFiles.cpp @@ -180,15 +180,39 @@ FilePosition EmbeddedFiles::Length(int32_t fileIndex) noexcept : 0; } -int EmbeddedFiles::Read(FileIndex fileIndex, char* extBuf, size_t nBytes) noexcept +// Open a file +FileIndex EmbeddedFiles::OpenFile(const char *filePath) noexcept { - //TODO - return -1; + if (_firmware_end.magic == EmbeddedFilesHeader::MagicValue) + { + for (FileIndex fi = 0; fi < (FileIndex)_firmware_end.numFiles; ++fi) + { + if (StringEqualsIgnoreCase(filePath, _firmware_end.files[fi].GetName())) + { + return fi; + } + } + } + return (FileIndex)-1; } -FileIndex EmbeddedFiles::OpenFile(const char *filePath) noexcept +// Read from a file +int EmbeddedFiles::Read(FileIndex fileIndex, FilePosition pos, char* extBuf, size_t nBytes) noexcept { - //TODO + if (_firmware_end.magic == EmbeddedFilesHeader::MagicValue && fileIndex >= 0 && fileIndex < (int32_t)_firmware_end.numFiles) + { + const size_t fileLength = _firmware_end.files[fileIndex].contentLength; + if (pos < fileLength) + { + if (nBytes > fileLength - pos) + { + nBytes = fileLength - pos; + } + memcpy(extBuf, _firmware_end.files[fileIndex].GetContent(), nBytes); + return nBytes; + } + return 0; + } return -1; } diff --git a/src/Storage/FileStore.cpp b/src/Storage/FileStore.cpp index 275c9b95..578c8698 100644 --- a/src/Storage/FileStore.cpp +++ b/src/Storage/FileStore.cpp @@ -404,7 +404,14 @@ int FileStore::Read(char* extBuf, size_t nBytes) noexcept return (int)bytes_read; } #elif HAS_EMBEDDED_FILES - return EmbeddedFiles::Read(fileIndex, extBuf, nBytes); + { + int ret = EmbeddedFiles::Read(fileIndex, offset, extBuf, nBytes); + if (ret > 0) + { + offset += ret; + } + return ret; + } #else return -1; #endif diff --git a/src/Storage/MassStorage.h b/src/Storage/MassStorage.h index e851b2a4..d0415727 100644 --- a/src/Storage/MassStorage.h +++ b/src/Storage/MassStorage.h @@ -30,7 +30,7 @@ namespace EmbeddedFiles bool FindNext(FileInfo& info) noexcept; FilePosition Seek(FileIndex fileIndex, FilePosition pos) noexcept; FilePosition Length(FileIndex fileIndex) noexcept; - int Read(FileIndex fileIndex, char* extBuf, size_t nBytes) noexcept; + int Read(FileIndex fileIndex, FilePosition pos, char* extBuf, size_t nBytes) noexcept; FileIndex OpenFile(const char *filePath) noexcept; } |