Newsgroup: it.comp.lang.c
Titolo: Segmentation fault non chiaro (per me).

Salve a tutti.
Non riesco a venire a capo ad un Segmentation fault.
In fase di compilazione ottengo:
gen.c: In function `leggi_par':
gen.c:86: warning: assignment makes pointer from integer without a cast
gen.c:89: warning: assignment makes pointer from integer without a cast
Ecco la definizione della struttura...
/* Contiene i parametri di collegamento */
typedef struct {
        char            *popserver;
        unsigned short  port;
        char            *username;
        char            *password;
        int             timeout;
} opzioni;
Ed ecco il codice di gen.c
/* Leggi i parametri da un file */
void leggi_par(opzioni *parametri) {
        char buf[1024], *opzione, *valore;
        FILE *inputfile;
        char *line;
        int numcampi = 0;
        /* Inizializzo parametri con i valori di default */
        parametri->popserver = DEFSERVER;
        parametri->timeout = TIMEOUT;
        parametri->port = PORTA;
        /* Apre uno stream sul file scelto */
        if ( ! (inputfile = fopen(CFGFILE,"r")) )
                if ( ! (inputfile = fopen("/etc/poprj","r")) ) {
                        perror("fopen");
                        exit(0);
                }
        /* Legge e elabora il file di configurazione */
        while ( fgets(buf,sizeof(buf),inputfile) != NULL ) {
                line = buf;
                /* Elimina gli spazi all'inizio della riga */
                while (*line && isspace((int)*line))
                                line++;
                /* Non elabora se si tratta di un commento */
                if (*line == '#')
                        continue;
                /* Legge l'opzione */
                if ((opzione = strtok(buf, " \t")) == NULL)
                        continue;
                /* Legge il valore dell'opzione */
 86:            if ((valore = strtok(NULL, "\0")) == NULL)
 87:                    continue;
 88:            while (*valore && isspace((int)*valore))
 89:                            valore++;
                /* Assegna i valori ai parametri */
                if ( ! strcasecmp(opzione,"username") )
                        strcpy(parametri->username,valore);
                if ( ! strcasecmp(opzione,"password") )
                        strcpy(parametri->password,valore);
                if ( ! strcasecmp(opzione,"popserver") )
                        strcpy(parametri->popserver,valore);
                if ( ! strcasecmp("timeout",opzione) )
                        parametri->timeout = (int)valore;
        }
        /* Chiude lo stream */
        fclose(inputfile);
}
Ed ecco infine il file di input:
$> cat ~/.poprj
username  test
password  testtest
popserver  127.0.0.1
timeout  5
Sapreste darmi una mano, vi saro' molto grato.
Ciao, Paolo.

                    continue;
mi sembra sospetto. Quando salvi una stringa non viene salvato anche il
terminatore.
 
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
ATTENZIONE: il mio indirizzo email e` cambiato, quello vecchio verra` 
disabilitato a breve.
"La Via prosegue senza fine."
	Bilbo Baggins - Il Signore degli Anelli - J.R.R. Tolkien

 Kronos
ciao e grazie.
Paolo.