27
27
#include < nvs.h>
28
28
#include < esp_partition.h>
29
29
#include < esp_log.h>
30
+ #include < new>
30
31
31
32
EEPROMClass::EEPROMClass (void ) : _handle(0 ), _data(0 ), _size(0 ), _dirty(false ), _name(" eeprom" ) {}
32
33
@@ -59,31 +60,31 @@ bool EEPROMClass::begin(size_t size) {
59
60
}
60
61
if (size < key_size) { // truncate
61
62
log_w (" truncating EEPROM from %d to %d" , key_size, size);
62
- uint8_t *key_data = ( uint8_t *) malloc (key_size) ;
63
+ uint8_t *key_data = new (std::nothrow) uint8_t [key_size] ;
63
64
if (!key_data) {
64
65
log_e (" Not enough memory to truncate EEPROM!" );
65
66
return false ;
66
67
}
67
68
nvs_get_blob (_handle, _name, key_data, &key_size);
68
69
nvs_set_blob (_handle, _name, key_data, size);
69
70
nvs_commit (_handle);
70
- free ( key_data) ;
71
+ delete[] key_data;
71
72
} else if (size > key_size) { // expand or new
72
73
size_t expand_size = size - key_size;
73
- uint8_t *expand_key = ( uint8_t *) malloc (expand_size) ;
74
+ uint8_t *expand_key = new (std::nothrow) uint8_t [expand_size] ;
74
75
if (!expand_key) {
75
76
log_e (" Not enough memory to expand EEPROM!" );
76
77
return false ;
77
78
}
78
79
// check for adequate free space
79
80
if (nvs_set_blob (_handle, " expand" , expand_key, expand_size)) {
80
81
log_e (" Not enough space to expand EEPROM from %d to %d" , key_size, size);
81
- free ( expand_key) ;
82
+ delete[] expand_key;
82
83
return false ;
83
84
}
84
- free ( expand_key) ;
85
+ delete[] expand_key;
85
86
nvs_erase_key (_handle, " expand" );
86
- uint8_t *key_data = ( uint8_t *) malloc (size) ;
87
+ uint8_t *key_data = new (std::nothrow) uint8_t [size] ;
87
88
if (!key_data) {
88
89
log_e (" Not enough memory to expand EEPROM!" );
89
90
return false ;
@@ -99,15 +100,15 @@ bool EEPROMClass::begin(size_t size) {
99
100
}
100
101
nvs_commit (_handle);
101
102
nvs_set_blob (_handle, _name, key_data, size);
102
- free ( key_data) ;
103
+ delete[] key_data;
103
104
nvs_commit (_handle);
104
105
}
105
106
106
107
if (_data) {
107
108
delete[] _data;
108
109
}
109
110
110
- _data = ( uint8_t *) malloc (size) ;
111
+ _data = new (std::nothrow) uint8_t [size] ;
111
112
if (!_data) {
112
113
log_e (" Not enough memory for %d bytes in EEPROM" , size);
113
114
return false ;
@@ -212,7 +213,7 @@ uint16_t EEPROMClass::convert(bool clear, const char *EEPROMname, const char *nv
212
213
}
213
214
214
215
size_t size = mypart->size ;
215
- uint8_t *data = ( uint8_t *) malloc (size) ;
216
+ uint8_t *data = new (std::nothrow) uint8_t [size] ;
216
217
if (!data) {
217
218
log_e (" Not enough memory to convert EEPROM!" );
218
219
goto exit;
@@ -255,7 +256,7 @@ uint16_t EEPROMClass::convert(bool clear, const char *EEPROMname, const char *nv
255
256
}
256
257
}
257
258
exit:
258
- free ( data) ;
259
+ delete[] data;
259
260
return result;
260
261
}
261
262
@@ -509,9 +510,9 @@ size_t EEPROMClass::writeBytes(int address, const void *value, size_t len) {
509
510
return len;
510
511
}
511
512
512
- template <class T > T EEPROMClass::writeAll (int address, const T &value) {
513
+ template <class T > size_t EEPROMClass::writeAll (int address, const T &value) {
513
514
if (address < 0 || address + sizeof (T) > _size) {
514
- return value ;
515
+ return 0 ;
515
516
}
516
517
517
518
memcpy (_data + address, (const uint8_t *)&value, sizeof (T));
0 commit comments