Skip to content

Commit f68f1da

Browse files
committed
Patch for nvs_read inconsistent behavior
See the following issue: zephyrproject-rtos/zephyr#86981 Signed-off-by: Simone Orru <[email protected]>
1 parent c63fc15 commit f68f1da

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

lib/astarte_device_sdk/kv_storage.c

+21-6
Original file line numberDiff line numberDiff line change
@@ -531,8 +531,15 @@ astarte_result_t astarte_kv_storage_iterator_get(
531531

532532
uint16_t key_id = 1 + (iter->current_pair * NVS_ENTRIES_FOR_PAIR) + NVS_ID_OFFSET_KEY;
533533

534-
ASTARTE_LOG_DBG("NVS read. Id: '%u', data: '%p', len: '%zu'", key_id, key, *key_size);
535-
nvs_rc = nvs_read(&nvs_fs, key_id, key, *key_size);
534+
if (!key && (*key_size == 0)) {
535+
uint8_t foo = 0;
536+
ASTARTE_LOG_DBG(
537+
"NVS read. Id: '%u', data: '%p', len: '%zu'", key_id, (void *) &foo, sizeof(foo));
538+
nvs_rc = nvs_read(&nvs_fs, key_id, &foo, sizeof(foo));
539+
} else {
540+
ASTARTE_LOG_DBG("NVS read. Id: '%u', data: '%p', len: '%zu'", key_id, key, *key_size);
541+
nvs_rc = nvs_read(&nvs_fs, key_id, key, *key_size);
542+
}
536543
if (nvs_rc < 0) {
537544
ASTARTE_LOG_ERR("NVS read error: %s (%d).", strerror(-nvs_rc), nvs_rc);
538545
ares = ASTARTE_RESULT_NVS_ERROR;
@@ -741,8 +748,16 @@ static astarte_result_t get_nvs_entry_with_alloc(
741748
static astarte_result_t get_nvs_entry(
742749
struct nvs_fs *nvs_fs, uint16_t entry_id, void *data, size_t *data_size)
743750
{
744-
ASTARTE_LOG_DBG("NVS read. Id: '%u', data: '%p', len: '%zu'", entry_id, data, *data_size);
745-
int nvs_rc = nvs_read(nvs_fs, entry_id, data, *data_size);
751+
int nvs_rc = 0;
752+
if (!data && (*data_size == 0)) {
753+
uint8_t foo = 0;
754+
ASTARTE_LOG_DBG(
755+
"NVS read. Id: '%u', data: '%p', len: '%zu'", entry_id, (void *) &foo, sizeof(foo));
756+
nvs_rc = nvs_read(nvs_fs, entry_id, &foo, sizeof(foo));
757+
} else {
758+
ASTARTE_LOG_DBG("NVS read. Id: '%u', data: '%p', len: '%zu'", entry_id, data, *data_size);
759+
nvs_rc = nvs_read(nvs_fs, entry_id, data, *data_size);
760+
}
746761
if (nvs_rc < 0) {
747762
ASTARTE_LOG_ERR("NVS read error: %s (%d).", strerror(-nvs_rc), nvs_rc);
748763
return ASTARTE_RESULT_NVS_ERROR;
@@ -758,8 +773,8 @@ static astarte_result_t get_nvs_entry(
758773
static astarte_result_t get_stored_pairs(struct nvs_fs *nvs_fs, uint16_t *stored_pairs)
759774
{
760775
uint16_t data = 0;
761-
ASTARTE_LOG_DBG(
762-
"NVS read. Id: '%u', data: '%p', len: '%zu'", STORED_PAIRS_NVS_ID, &data, sizeof(data));
776+
ASTARTE_LOG_DBG("NVS read. Id: '%u', data: '%p', len: '%zu'", STORED_PAIRS_NVS_ID,
777+
(void *) &data, sizeof(data));
763778
int nvs_rc = nvs_read(nvs_fs, STORED_PAIRS_NVS_ID, &data, sizeof(data));
764779
if ((nvs_rc < 0) && (nvs_rc != -ENOENT)) {
765780
ASTARTE_LOG_ERR("NVS read error: %s (%d).", strerror(-nvs_rc), nvs_rc);

0 commit comments

Comments
 (0)