firstnode never changes. AddToList is passed the _value_ of firstnode (which is NULL), and operates on the local variable. Upon return, firstnode remains NULL.
You have to either pass an address of firstnode,
void AddToList(LankadLista ** listaptr, char name[])
{
...
*listaptr = newnode;
...
}
main()
{
...
AddToList(&firstnode, ...);
...
}
or return the modified local:
LankadLista * AddToList(LankadLista * lista, char name[])
{
...
return lista;
}
main()
{
...
firstnode = AddToList(firsnode, ...);
...
}