From ca35b6a82cca519bdf0ed65bfe0ff8034c46059b Mon Sep 17 00:00:00 2001 From: H1ghBre4k3r Date: Tue, 13 Apr 2021 14:29:07 +0200 Subject: [PATCH] Delete page before incrementing sn --- src/ens/storage.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ens/storage.c b/src/ens/storage.c index 49b2690..df7662c 100644 --- a/src/ens/storage.c +++ b/src/ens/storage.c @@ -101,7 +101,7 @@ int init_contact_storage(void) { // TODO lome: change size to sizeof(contact_struct) rc = ens_fs_init(&ens_fs, FLASH_AREA_ID(ens_storage), 32); - if(rc) { + if (rc) { printk("Cannot init ens_fs (err %d)\n", rc); } return rc; @@ -118,14 +118,19 @@ int load_contact(contact_t* dest, record_sequence_number_t sn) { } int add_contact(contact_t* src) { + + // Check, if next sn would be at start of page + record_sequence_number_t potential_next_sn = sn_increment(get_latest_sequence_number()); + storage_id_t potential_next_id = convert_sn_to_storage_id(potential_next_sn); + if (((potential_next_id * ens_fs.entry_size) % ens_fs.sector_size) == 0) { + // If we are at start of a page, we need to erase it first + ens_fs_page_erase(&ens_fs, potential_next_id, 1); + } + + // Actually increment sn record_sequence_number_t curr_sn = get_next_sequence_number(); storage_id_t id = convert_sn_to_storage_id(curr_sn); - // If we are at start of a page, we need to erase it first - if(!(id * ens_fs.entry_size) % ens_fs.sector_size) { - ens_fs_page_erase(&ens_fs, id, 1); - } - int rc = ens_fs_write(&ens_fs, id, src); if (rc > 0) { return 0;