Skip to content

Commit 83de5f9

Browse files
committed
Define mapping from littlefs errors to register storage API errors.
1 parent 82108fd commit 83de5f9

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/storage/kv_storage/littlefs/kv_littlefs.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#if __GNUC__ >= 11
1515

16+
#include <map>
1617
#include <string>
1718
#include <variant>
1819
#include <sstream>
@@ -24,6 +25,29 @@
2425
namespace cyphal::support::platform::storage
2526
{
2627

28+
/**************************************************************************************
29+
* CONSTANTS
30+
**************************************************************************************/
31+
32+
static std::map<littlefs::Error, Error> const LITTLEFS_TO_STORAGE_ERROR_MAP =
33+
{
34+
{littlefs::Error::IO , Error::IO},
35+
{littlefs::Error::CORRUPT , Error::Internal},
36+
{littlefs::Error::NOENT , Error::Existence},
37+
{littlefs::Error::EXIST , Error::Existence},
38+
{littlefs::Error::NOTDIR , Error::Internal},
39+
{littlefs::Error::ISDIR , Error::API},
40+
{littlefs::Error::NOTEMPTY , Error::API},
41+
{littlefs::Error::BADF , Error::Internal},
42+
{littlefs::Error::FBIG , Error::Internal},
43+
{littlefs::Error::INVAL , Error::API},
44+
{littlefs::Error::NOSPC , Error::API},
45+
{littlefs::Error::NOMEM , Error::Capacity},
46+
{littlefs::Error::NOATTR , Error::API},
47+
{littlefs::Error::NAMETOOLONG , Error::API},
48+
{littlefs::Error::NO_FD_ENTRY , Error::API},
49+
};
50+
2751
/**************************************************************************************
2852
* CTOR/DTOR
2953
**************************************************************************************/
@@ -46,20 +70,16 @@ auto KeyValueStorage_littlefs::get(const std::string_view key, const std::size_t
4670
/* Open the file containing the registry value. */
4771
auto const rc_open = _filesystem.open(key_filename.str(), littlefs::OpenFlag::RDONLY);
4872
if (std::holds_alternative<littlefs::Error>(rc_open))
49-
{
50-
if (std::get<littlefs::Error>(rc_open) == littlefs::Error::NOENT)
51-
return Error::Existence;
52-
else
53-
return Error::IO;
54-
}
73+
return LITTLEFS_TO_STORAGE_ERROR_MAP.at(std::get<littlefs::Error>(rc_open));
74+
5575
littlefs::FileHandle const file_hdl = std::get<littlefs::FileHandle>(rc_open);
5676

5777
/* Read from the file. */
5878
auto const rc_read = _filesystem.read(file_hdl, data, size);
5979
if (std::holds_alternative<littlefs::Error>(rc_read))
6080
{
6181
(void)_filesystem.close(file_hdl);
62-
return Error::IO;
82+
return LITTLEFS_TO_STORAGE_ERROR_MAP.at(std::get<littlefs::Error>(rc_read));
6383
}
6484

6585
(void)_filesystem.close(file_hdl);
@@ -77,7 +97,7 @@ auto KeyValueStorage_littlefs::put(const std::string_view key, const std::size_t
7797
/* Open the file containing the registry value. */
7898
auto const rc_open = _filesystem.open(key_filename.str(), littlefs::OpenFlag::WRONLY | littlefs::OpenFlag::CREAT | littlefs::OpenFlag::TRUNC);
7999
if (std::holds_alternative<littlefs::Error>(rc_open))
80-
return Error::IO;
100+
return LITTLEFS_TO_STORAGE_ERROR_MAP.at(std::get<littlefs::Error>(rc_open));
81101

82102
littlefs::FileHandle const file_hdl = std::get<littlefs::FileHandle>(rc_open);
83103

@@ -86,7 +106,7 @@ auto KeyValueStorage_littlefs::put(const std::string_view key, const std::size_t
86106
if (std::holds_alternative<littlefs::Error>(rc_write))
87107
{
88108
(void)_filesystem.close(file_hdl);
89-
return Error::IO;
109+
return LITTLEFS_TO_STORAGE_ERROR_MAP.at(std::get<littlefs::Error>(rc_write));
90110
}
91111

92112
(void)_filesystem.close(file_hdl);

0 commit comments

Comments
 (0)