* number of parsed addresses. element is set to
* the last parsed addresse.
*/
-size_t
+ssize_t
getmboxes(char *line, struct mailname **element)
{
- struct mailname *mp, *next;
+ struct mailname *mp, *next, *first;
char *cp;
size_t i = 0;
- next = (*element)->m_next;
+ first = *element;
+ next = first->m_next;
while ((cp = getname(line))) {
mp = getm(cp, NULL, 0, AD_HOST, NULL);
+ if (mp == NULL) {
+ goto error;
+ }
(*element)->m_next = mp;
*element = mp;
i++;
(*element)->m_next = next;
return i;
+error:
+ while (first->m_next != NULL && first->m_next != next) {
+ mp = first->m_next;
+ first->m_next = mp->m_next;
+ free(mp);
+ }
+ first->m_next = next;
+ return -1;
}