View Single Post
Old 12-05-2006, 00:13   #1
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
[C] problema con funzione

ciao! ho fatto una funzione che però mi da dei problemi... vorrei sapere dove sbaglio per favore.

la funzione dovrebbe restituire una lista di utenti che sono inseriti all interno di una tabella hash, dove il singolo elemento rapprenseta i dati dell utente: key(nome) e value(un valore).

questa lista va scritta nel buffer della struttura m (m->buffer)
e deve contenere le chiavi presenti nella tabella hash separatate da '\0'.
es: paolo'\0'marco'\0'giulio'\0' e cosi via...

tutti i parametri passati sono allocati e vanno bene. il problema è proprio il codice della funzione.

/* @description -- (comando list) invia la lista degli utenti connessi
@param dati -- puntatore all elemento hash che contiene i dati dell utente client
@param m -- puntatore alla struttura del messaggio da inviare
@returns --
*/
static void list(hashElement_t* dati, message_t* m){
hashElement_t* plist;
int i;
int spazio=0;
char* s;
pthread_mutex_lock(&(stanza->lock));
/*mi trovo lo spazio necessario per contenere le chiavi esistenti*/
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
spazio=spazio + strlen(plist->key)+1;
plist=plist->next;
}
}
s=malloc(spazio*sizeof(char));
m->buffer=s;
m->type='L';
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
sprintf(s,"%s%c",plist->key,'\0');
s=s+strlen(s)+1;
plist=plist->next;
}

pthread_mutex_unlock(&(stanza->lock));
}
if(sendMessage(dati->value,m)==-1){
fprintf(stderr,"Errore in 'sendMessage'.\n");
exit(EXIT_FAILURE);
}

return;
}

noodles83 è offline   Rispondi citando il messaggio o parte di esso