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/Storage/EmbeddedFiles.cpp | |
parent | dec742c246bf27d2fc84dc153e5db46d3c5d08cb (diff) |
More work on embedded files
Diffstat (limited to 'src/Storage/EmbeddedFiles.cpp')
-rw-r--r-- | src/Storage/EmbeddedFiles.cpp | 34 |
1 files changed, 29 insertions, 5 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; } |