use malloc/free for WiFiManagerParameter* array instead of hard coding.

add alternate constructor to specifiy max parameter count
origional default constructor uses old hard codded value
This commit is contained in:
Chris Liebman
2017-06-04 06:41:27 -07:00
parent 3135bc5e89
commit 362a561a35
3 changed files with 35 additions and 3 deletions
+25 -2
View File
@@ -60,14 +60,37 @@ const char* WiFiManagerParameter::getCustomHTML() {
return _customHTML;
}
WiFiManager::WiFiManager() {
init(WIFI_MANAGER_MAX_PARAMS);
}
WiFiManager::WiFiManager(int max_params) {
init(max_params);
}
void WiFiManager::init(int max_params)
{
DEBUG_WM(F("setting max_params to:"));
DEBUG_WM(max_params);
_max_params = max_params;
_params = (WiFiManagerParameter**)malloc(_max_params * sizeof(WiFiManagerParameter*));
}
WiFiManager::~WiFiManager()
{
if (_params != NULL)
{
DEBUG_WM(F("freeing allocated params!"));
free(_params);
}
}
void WiFiManager::addParameter(WiFiManagerParameter *p) {
if(_paramsCount + 1 > WIFI_MANAGER_MAX_PARAMS)
if(_paramsCount + 1 > _max_params)
{
//Max parameters exceeded!
DEBUG_WM("WIFI_MANAGER_MAX_PARAMS exceeded, increase number (in WiFiManager.h) before adding more parameters!");
DEBUG_WM("max_params value exceeded, use WiFiManager(int max_params) constructor with a larger value!");
DEBUG_WM("Skipping parameter with ID:");
DEBUG_WM(p->getID());
return;