[esp32][libretiny] Avoid duplicate snprintf when syncing preferences (#12542)
This commit is contained in:
@@ -130,10 +130,10 @@ class ESP32Preferences : public ESPPreferences {
|
|||||||
// go through vector from back to front (makes erase easier/more efficient)
|
// go through vector from back to front (makes erase easier/more efficient)
|
||||||
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
||||||
const auto &save = s_pending_save[i];
|
const auto &save = s_pending_save[i];
|
||||||
ESP_LOGVV(TAG, "Checking if NVS data %" PRIu32 " has changed", save.key);
|
char key_str[KEY_BUFFER_SIZE];
|
||||||
if (this->is_changed(this->nvs_handle, save)) {
|
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
ESP_LOGVV(TAG, "Checking if NVS data %s has changed", key_str);
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
if (this->is_changed_(this->nvs_handle, save, key_str)) {
|
||||||
esp_err_t err = nvs_set_blob(this->nvs_handle, key_str, save.data.get(), save.len);
|
esp_err_t err = nvs_set_blob(this->nvs_handle, key_str, save.data.get(), save.len);
|
||||||
ESP_LOGV(TAG, "sync: key: %s, len: %zu", key_str, save.len);
|
ESP_LOGV(TAG, "sync: key: %s, len: %zu", key_str, save.len);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
@@ -166,10 +166,9 @@ class ESP32Preferences : public ESPPreferences {
|
|||||||
|
|
||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
bool is_changed(const uint32_t nvs_handle, const NVSData &to_save) {
|
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, to_save.key);
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool is_changed_(uint32_t nvs_handle, const NVSData &to_save, const char *key_str) {
|
||||||
size_t actual_len;
|
size_t actual_len;
|
||||||
esp_err_t err = nvs_get_blob(nvs_handle, key_str, nullptr, &actual_len);
|
esp_err_t err = nvs_get_blob(nvs_handle, key_str, nullptr, &actual_len);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ class LibreTinyPreferences : public ESPPreferences {
|
|||||||
// go through vector from back to front (makes erase easier/more efficient)
|
// go through vector from back to front (makes erase easier/more efficient)
|
||||||
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
||||||
const auto &save = s_pending_save[i];
|
const auto &save = s_pending_save[i];
|
||||||
ESP_LOGVV(TAG, "Checking if FDB data %" PRIu32 " has changed", save.key);
|
char key_str[KEY_BUFFER_SIZE];
|
||||||
if (this->is_changed(&this->db, save)) {
|
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
ESP_LOGVV(TAG, "Checking if FDB data %s has changed", key_str);
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
if (this->is_changed_(&this->db, save, key_str)) {
|
||||||
ESP_LOGV(TAG, "sync: key: %s, len: %zu", key_str, save.len);
|
ESP_LOGV(TAG, "sync: key: %s, len: %zu", key_str, save.len);
|
||||||
fdb_blob_make(&this->blob, save.data.get(), save.len);
|
fdb_blob_make(&this->blob, save.data.get(), save.len);
|
||||||
fdb_err_t err = fdb_kv_set_blob(&this->db, key_str, &this->blob);
|
fdb_err_t err = fdb_kv_set_blob(&this->db, key_str, &this->blob);
|
||||||
@@ -150,10 +150,8 @@ class LibreTinyPreferences : public ESPPreferences {
|
|||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_changed(const fdb_kvdb_t db, const NVSData &to_save) {
|
protected:
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
bool is_changed_(fdb_kvdb_t db, const NVSData &to_save, const char *key_str) {
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, to_save.key);
|
|
||||||
|
|
||||||
struct fdb_kv kv;
|
struct fdb_kv kv;
|
||||||
fdb_kv_t kvp = fdb_kv_get_obj(db, key_str, &kv);
|
fdb_kv_t kvp = fdb_kv_get_obj(db, key_str, &kv);
|
||||||
if (kvp == nullptr) {
|
if (kvp == nullptr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user