diff --git a/WiFiManager.cpp b/WiFiManager.cpp index cf5d801..a82480a 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -75,24 +75,27 @@ WiFiManager::~WiFiManager() } } -void WiFiManager::addParameter(WiFiManagerParameter *p) { +bool WiFiManager::addParameter(WiFiManagerParameter *p) { if(_paramsCount + 1 > _max_params) { // rezise the params array _max_params += WIFI_MANAGER_MAX_PARAMS; DEBUG_WM(F("Increasing _max_params to:")); DEBUG_WM(_max_params); - WiFiManagerParameter** new_params = (WiFiManagerParameter**)malloc(_max_params * sizeof(WiFiManagerParameter*)); - // copy old data - memcpy(new_params, _params, _paramsCount * sizeof(WiFiManagerParameter*)); - free(_params); - _params = new_params; + WiFiManagerParameter** new_params = (WiFiManagerParameter**)realloc(_params, _max_params * sizeof(WiFiManagerParameter*)); + if (new_params != NULL) { + _params = new_params; + } else { + DEBUG_WM("ERROR: failed to realloc params, size not increased!"); + return false; + } } _params[_paramsCount] = p; _paramsCount++; DEBUG_WM("Adding parameter"); DEBUG_WM(p->getID()); + return true; } void WiFiManager::setupConfigPortal() { diff --git a/WiFiManager.h b/WiFiManager.h index f95ce1b..9a22573 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -100,8 +100,8 @@ class WiFiManager void setAPCallback( void (*func)(WiFiManager*) ); //called when settings have been changed and connection was successful void setSaveConfigCallback( void (*func)(void) ); - //adds a custom parameter - void addParameter(WiFiManagerParameter *p); + //adds a custom parameter, returns false on failure + bool addParameter(WiFiManagerParameter *p); //if this is set, it will exit after config, even if connection is unsuccessful. void setBreakAfterConfig(boolean shouldBreak); //if this is set, try WPS setup when starting (this will delay config portal for up to 2 mins)