diff -uNr nm1/src/iniparser.c nm2/src/iniparser.c --- nm1/src/iniparser.c 2016-06-15 06:17:55.454354915 +0000 +++ nm2/src/iniparser.c 2016-06-16 01:34:40.587238993 +0000 @@ -537,7 +537,8 @@ ) { uint32_t err = 0; - PKEYVALUE_INI pCursor = NULL; + PKEYVALUE_INI *pCursor = NULL; + PKEYVALUE_INI pCandidate = NULL; if (!pSection || !pszKey || !*pszKey) { @@ -545,29 +546,22 @@ bail_on_error(err); } - pCursor = pSection->pKeyValue; - while (pCursor) + pCursor = &pSection->pKeyValue; + while (*pCursor) { - PKEYVALUE_INI pCandidate = NULL; - - if (!strcmp(pCursor->pszKey, pszKey)) + if (!strcmp((*pCursor)->pszKey, pszKey)) { - pCandidate = pCursor; - - if (pCursor == pSection->pKeyValue) - { - pSection->pKeyValue = pCursor->pNext; - } + pCandidate = *pCursor; + *pCursor = pCandidate->pNext; + break; } + pCursor = &(*pCursor)->pNext; + } - pCursor = pCursor->pNext; - - if (pCandidate) - { - pCandidate->pNext = NULL; - - ini_cfg_free_keyvalue(pCandidate); - } + if (pCandidate) + { + pCandidate->pNext = NULL; + ini_cfg_free_keyvalue(pCandidate); } error: