Witam,

Czy ten kod programu jest poprawny? Jakie błędy mogą w nim wystąpić? Uczę się teraz tego trudnego języka, ale chciałbym wiedzieć co w nim poprawić.

/** Statycznie zdefiniowany uzytkownik */
UZYTKOWNIK		"GRAF2"

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

/**
* Definicja struktury, zbudowanej na wskaznikach kolejki jednokierunkowej, uzywanej
* do omijania dublujacych sie wynikow
* Dodatkowo deklaracja dwoch wskaznikow - poczatku i konca (dla przyspieszenia operacji)
*/
struct lista {
	char *nazwa;
	struct lista *next;
} *start = 0, *stop = 0;

/**
* Funkcja dodaj dodaje nowy element na koniec kolejki
*/
void dodaj(char *str) {
	struct lista *tmp;
	char *strtmp;

	tmp = (struct lista*)malloc(sizeof(struct lista));
	strtmp = (char*)malloc(sizeof(char)*(strlen(str)+1));
	strcpy(strtmp, str);

	if(!start)
	stop = start = tmp;
	stop->next = tmp;
	tmp->nazwa = strtmp;
	tmp->next = 0;
	stop = tmp;
}

/**
* Funkcja wyszukaj zwraca 1, jezeli znajdzie ciag znakow str w kolejce
* Zwraca 0 jezeli nie znajdzie (rowniez jezeli kolejka jest pusta)
*/
int wyszukaj(char *str) {
	int zwrot = 1;
	struct lista *tmp = start;

	if(start) {
		while(tmp && zwrot) {
		zwrot = strcmp(tmp->nazwa, str);
		tmp = tmp->next;
		}
	}
	return !zwrot;
}

/**
* Funkcja mpo jest wywolywana pod koniec programu, usuwa wszystkie
* dynamicznie stworzone obiekty
*/
void mpo() {
	struct lista *tmp = start;

	while(tmp) {
		tmp = tmp->next;
		free(start->nazwa);
		free(start);
		start = tmp;
	}
}

%}

/**
* Definicja stanu fineline - oznacza, ze linia dotyczy polaczenia danego uzytkownika
* faktyczne sprawdzenie, czy uzytkownik laczy sie ze strona nastepuje pozniej
*/
%s fineline

NUM				[0-9]
SIGN			[0-9a-zA-Z]+

PREFIX			{NUM}{2}":"{NUM}{2}":"{NUM}{2}"."({NUM}+)" IP "{UZYTKOWNIK}"."({NUM}+)" > "
SUFFIX			".80: S"

DEST			{SIGN}("."{SIGN})*

%%


{PREFIX} BEGIN(fineline) /* Zmiana stanu skanera, jezeli linia dotyczy odpowiedniego uzytkownika */;

<fineline>{DEST}/{SUFFIX} {
	/* Jezeli skaner jest w stanie <fineline> i polaczenie wywolano na port 80 */
	if(!wyszukaj(yytext)) { /* Sprawdzenie czy znaleziony adres hosta jest zapisany w kolejce */
		printf("%s\n", yytext); /* Wypisanie adresu, jezeli nie znaleziono w kolejce */
		dodaj(yytext); /* Dodanie nowego adresu */
	}
	/* W jezeli adres znaleziono w kolejce, zadna akcja nie jest wywolywana */
}

\n 					BEGIN(0); /* Koniec linii oznacza powrot do stanu zerowego */
.

%%

int main(int argc, char *argv[]) {
	yylex(); /* Wywolanie skanera flex */
	mpo(); /* Czyszczenie po pracy */
	return 0;
}

Dziękuję za pomoc!

Pozdrawiam