Mam problem. Chce aby funkcja logowanie zwracała login po poprawnym zalogowaniu, ale coś mi nie wychodzi:( Byłbym wdzięczny za jakąś wskazówkę.

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct baza {
        char *login;
        char *haslo;
        int upr;
        struct baza *nastepny;
};

struct baza *pierwszy=NULL;
struct baza *ostatni=NULL;

dodaj()
{
    int upr;
    char login[10],haslo[20];
    FILE *p;

    printf("podaj login:\n");
    scanf("%s",&login);
    printf("podaj haslo:\n");
    scanf("%s",&haslo);
    p=fopen ("uzytkownicy124.txt", "r");
    if (p==NULL) {
    upr=3;

    }
    else upr=0;


        struct baza *nowy;
        struct baza * tmp;

        nowy=malloc(sizeof(struct baza));

        nowy->login=malloc(strlen(login)+1);
        strcpy(nowy->login,login);


        nowy->haslo=malloc(strlen(haslo)+1);
        strcpy(nowy->haslo,haslo);

        nowy->upr=upr;
        nowy->nastepny=NULL;

        if(pierwszy==NULL){
                pierwszy=ostatni=nowy;
        //      return 0;
        }
        else {
        ostatni->nastepny=nowy;
        ostatni=nowy;
        }

  p=fopen("uzytkownicy124.txt", "a+");
      tmp=pierwszy;
  while(tmp!=NULL) {
      fprintf (p,"%s %s %d\n",tmp->login,tmp->haslo,tmp->upr);
        tmp=tmp->nastepny;
        fclose(p);
}
}
char logowanie ()
{

  char s[30];
  int i;
  FILE * p;
  struct baza * tmp;


  system("cls");

  p=fopen("uzytkownicy124.txt", "r");

  while(pierwszy!=NULL) {
    free(pierwszy->haslo);
    free(pierwszy->login);
    pierwszy=pierwszy->nastepny;
  }

  while(!feof(p)) {
    tmp= calloc(1, sizeof(struct baza));
    fscanf(p, "%d\n", &i);
    tmp->upr=i;
    tmp->login=calloc(30, 1);
    fscanf(p, "%s\n", s);
    strcpy(tmp->login, s); //odwrotnie?
    tmp->haslo=calloc(30, 1);
    fscanf(p, "%s\n", s);
    strcpy(tmp->haslo, s);


        tmp->nastepny=NULL;
        if(pierwszy==NULL){
                pierwszy=ostatni=tmp;
        //      return 0;
        }
        else {
        ostatni->nastepny=tmp;
        ostatni=tmp;
        }

  }

  fclose(p);

        tmp=pierwszy;
        char nazwa[20];

        char haslo[20];
        int znaleziono=0;


        system("cls");

        printf("LOGIN:\n");
        scanf("%s",&nazwa);
        printf("HASLO:\n");
        scanf("%s",&haslo);
        while(tmp!=NULL){
                if(strcmp(tmp->login,nazwa)==0){
                    znaleziono=1;
               if(strcmp(tmp->haslo,haslo)==0)
                    znaleziono=2;
                    break;
                }
                tmp=tmp->nastepny;
        }
        if(znaleziono==0) {printf("Nie ma takiego uzytkownika\n"); exit (0);}
        if(znaleziono==1) {printf("ZLE HASLO"); exit (0);}
        if(znaleziono==2) {printf("ZALOGOWALES SIE!\n");}

        fflush(stdin);
        fgetc(stdin);

        return nazwa[20];

}


main ()
{
    char nazwa[20];
    int i;
    dodaj ();
    logowanie();

    printf ("Twoj login to%s",nazwa);

}