[C] Sortowanie listy jednokierunkowej

Witam

Mam duży problem z napisaniem funkcji sortującej listę jednokierunkową. Funkcja sortująca jest wywoływana po dodaniu nowego rekordu do listy. Niestety, pomimo udanej kompilacji nie chce sortować tzn. nie zmienia nic na liście, a program nie wyrzuca żadnego błędu. Oto kod:

typedef struct baza {

    int numer; //numer kontaktu

    char imie[15];

    char nazwisko[20];

    char ulica[20];

    char nrdomu[5];

    char telefon[20];

    struct baza *nast; //wskaznik do nastepnego elementu listy

    int zlicz;

    } Baza;

Baza *pierwszy,*aktualny,*nowy;


void sortowanie()

{


    struct baza *tmp = NULL;

    struct baza *next = NULL;


    for (aktualny=pierwszy; aktualny && aktualny->nast; aktualny=aktualny->nast)

        {

            if ( atoi(aktualny->telefon) > atoi(aktualny->nast->telefon) )

            {

                tmp = (struct baza*)calloc( 1, sizeof( struct baza ) );

                next = (struct baza*)calloc( 1, sizeof( struct baza ) );


                *tmp = *aktualny;


                *next = *aktualny->nast;


                aktualny = next;


                if( !(next->nast) )

                aktualny->nast = NULL;;

            }

        }

}

Z góry dziękuję za pomoc i pozdrawiam.

Jedyne co podana funkcja powinna robić to powodować wyciek pamięci, nie rozumiem jak ona miała by sortować.